Java配置log4j日志打印

news/2025/1/15 17:07:50/

1. 引入依赖

<dependencies><!-- Log4j 2依赖 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>1.2.14</version> <!-- 可以根据需要修改版本 --></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>1.2.14</version> <!-- 可以根据需要修改版本 --></dependency>
</dependencies>

2. 配置文件

Log4j 需要一个配置文件来定义日志输出的方式、级别和格式。你可以创建一个名为 log4j2.xmllog4j2.propertieslog4j2.json 的配置文件。

log4j2.properties

log4j.rootLogger=INFO,file,consolelog4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=logs/pro_alllog.log
log4j.appender.file.Threshold=INFO
#log4j.appender.file.MaxFileSize=2048KB
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=<%p><%d{yyyy-MM-dd HH:mm:ss.SSSS}>[%X{loggerId}]<%F><%M><%L><%t>%m%n
log4j.appender.file.encoding=GBK

这个配置文件是 Log4j 1.x 的配置文件(log2没有properties格式的配置文件),下面是对每个配置项的详细解释:

  1. log4j.rootLogger=INFO,file,console
    log4j.rootLogger:定义了根日志记录器的日志级别和附加器(Appender)。
    INFO:设置日志的最低级别为 INFO。这意味着只有 INFO、WARN、ERROR 和 FATAL 级别的日志会被记录,低于 INFO 级别的日志(如 DEBUG 和 TRACE)将被忽略。
    file 和 console:表示日志将被发送到两个目标(Appender):文件和控制台。
  2. log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.file:定义了一个日志附加器(Appender),此处使用的是 DailyRollingFileAppender,意味着日志将被写入文件,并且每天会生成一个新的日志文件。
    org.apache.log4j.DailyRollingFileAppender:是 Log4j 提供的一个内置类,它会根据日期进行日志文件的滚动(例如每天创建一个新的日志文件)。
  3. log4j.appender.file.File=logs/pro_alllog.log
    log4j.appender.file.File:指定日志文件的路径和文件名。在这里,日志将被写入到 logs/pro_alllog.log 文件中。
  4. log4j.appender.file.Threshold=INFO
    log4j.appender.file.Threshold:指定该附加器的日志记录级别。INFO 表示只有 INFO 及其以上级别的日志(如 WARN、ERROR、FATAL)才会写入到日志文件中,低于 INFO 级别的日志(如 DEBUG 和 TRACE)将不会被记录到文件中。
  5. log4j.appender.file.MaxFileSize=2048KB
    MaxFileSize 设定了单个日志文件的最大大小,当文件大小超过此阈值时,会创建一个新的日志文件。
    如果启用,2048KB 表示每个日志文件的最大大小为 2MB。
  6. log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout:指定日志格式的布局方式。在这里使用了 PatternLayout,它允许你自定义日志条目的格式。
    PatternLayout 是一种非常灵活的日志格式布局方式,允许使用格式化模式定义日志的输出格式。
  7. log4j.appender.file.layout.ConversionPattern=<%p><%d{yyyy-MM-dd HH:mm:ss.SSSS}>[%X{loggerId}]<%F><%M><%L><%t>%m%n
    log4j.appender.file.layout.ConversionPattern:定义了日志消息的格式。
    • %p:日志级别(如 INFO、ERROR)。
    • %d{yyyy-MM-dd HH:mm:ss.SSSS}:日志的时间戳,格式为 yyyy-MM-dd HH:mm:ss.SSSS,即年-月-日 小时:分钟:秒.毫秒。
    • [%X{loggerId}]:日志上下文信息中名为 loggerId 的值(如果有设置 MDC(Mapped Diagnostic Context)中的 loggerId)。
    • %F:输出日志所在的源代码文件名。
    • %M:输出日志所在的函数名。
    • %L:输出日志所在的行号。
    • %t:输出日志产生的线程的名称。
    • %m:输出日志的消息内容。
    • %n:换行符。
      这个模式定义了每条日志记录的格式,使得日志具有非常详细的上下文信息,帮助开发人员定位问题。
  8. log4j.appender.file.encoding=GBK
    log4j.appender.file.encoding:指定日志文件的字符编码。在这里,日志文件使用 GBK 编码格式,这对中文日志尤其重要,因为它能确保日志文件正确地显示中文字符。
    总结:
    这个配置文件定义了 Log4j 的日志输出设置:

3. 在代码中使用 Log4j

在 Java 代码中,你可以使用 Log4j 记录日志。首先,导入 Log4j 的 API 类,然后创建 Logger 对象。

java">javaCopy Codeimport org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class MyApplication {// 创建 Logger 对象private static final Logger logger = LogManager.getLogger(MyApplication.class);public static void main(String[] args) {// 记录不同级别的日志logger.trace("This is a trace message.");logger.debug("This is a debug message.");logger.info("This is an info message.");logger.warn("This is a warn message.");logger.error("This is an error message.");logger.fatal("This is a fatal message.");}
}

4. Log 2版本配置文件

  • 类路径(Classpath):Log4j 2.x 会默认在类路径(例如项目的 resources 目录)中查找配置文件,特别是 log4j2.xml。
  • 如果配置文件不在类路径中,Log4j2 可能不会按预期工作。
  • 典型的文件路径:src/main/resources/log4j2.xml 或者 src/main/resources/log4j2.yml,视项目的构建方式和结构而定。

xml版本

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><!-- 文件输出配置,类似于 DailyRollingFileAppender --><RollingFile name="FileAppender" fileName="logs/pro_alllog.log" filePattern="logs/$${date:yyyy-MM-dd}/pro_alllog-%d{yyyy-MM-dd}.log"><PatternLayout pattern="<%p><%d{yyyy-MM-dd HH:mm:ss.SSSS}>[%X{loggerId}]<%F><%M><%L><%t>%m%n"/><Policies><!-- 滚动策略,可以基于时间滚动 --><TimeBasedTriggeringPolicy interval="1" modulate="true"/></Policies><Encoding>GBK</Encoding></RollingFile><!-- 控制台输出配置 --><Console name="ConsoleAppender"><PatternLayout pattern="<%p><%d{yyyy-MM-dd HH:mm:ss.SSSS}>[%X{loggerId}]<%F><%M><%L><%t>%m%n"/></Console></Appenders><Loggers><!-- 根日志记录器,日志级别设置为INFO,添加文件和控制台输出 --><Root level="info"><AppenderRef ref="FileAppender"/><AppenderRef ref="ConsoleAppender"/></Root></Loggers>
</Configuration>

yaml版本

Configuration:status: WARNAppenders:RollingFile:name: FileAppenderfileName: logs/pro_alllog.logfilePattern: logs/$${date:yyyy-MM-dd}/pro_alllog-%d{yyyy-MM-dd}.logPatternLayout:pattern: "<%p><%d{yyyy-MM-dd HH:mm:ss.SSSS}>[%X{loggerId}]<%F><%M><%L><%t>%m%n"Policies:- TimeBasedTriggeringPolicy:interval: 1modulate: trueEncoding: GBKConsole:name: ConsoleAppenderPatternLayout:pattern: "<%p><%d{yyyy-MM-dd HH:mm:ss.SSSS}>[%X{loggerId}]<%F><%M><%L><%t>%m%n"Loggers:Root:level: infoAppenderRef:- ref: FileAppender- ref: ConsoleAppender

http://www.ppmy.cn/news/1563373.html

相关文章

[大模型]本地离线运行openwebui+ollama容器化部署

本地离线运行Openweb-ui ollama容器化部署 说明安装internet操作内网操作 问题线程启动错误最终命令 总结 说明 最近公司有一个在内网部署一个离线大模型的需求&#xff0c;网络是离线状态&#xff0c;服务器有A100GPU&#xff0c;一开始是想折腾开源chatGML4大模型&#xff0…

Trimble自动化激光监测支持历史遗产实现可持续发展【沪敖3D】

故事桥&#xff08;Story Bridge&#xff09;位于澳大利亚布里斯班&#xff0c;建造于1940年&#xff0c;全长777米&#xff0c;横跨布里斯班河&#xff0c;可载汽车、自行车和行人往返于布里斯班的北部和南部郊区。故事桥是澳大利亚最长的悬臂桥&#xff0c;是全世界两座手工建…

SpringBoot 基础学习

对于SpringBoot的了解&#xff0c;在初学者的角度看来&#xff0c;它是一种工具&#xff0c;用于简化一个Spring项目的初始搭建和开发过程。 1 入门案例 1.1 项目的创建 有四种方法创建&#xff0c;可以通过idea快捷创建&#xff0c;Spring的官网创建&#xff0c;阿里云创建&am…

在 Rider 中使用 C# 创建 Windows 窗体应用 Winforms

1&#xff0c;创建项目 new solution 创建一个解决方案 2&#xff0c;打开设计器 在 Form1.cs 上右键打开设计器 认识一下 Rider 的界面 参考微软官方的例子&#xff0c;添加如下属性&#xff1a;注&#xff1a;这里 Listbox 的大小设置成 120, 94 失败&#xff0c;默认的是 12…

PySpark用sort-merge join解决数据倾斜的完整案例

假设有两个大表 table1 和 table2 &#xff0c;并通过 sort-merge join 来解决可能的数据倾斜问题。 from pyspark.sql import SparkSession from pyspark.sql.functions import col# 初始化SparkSession spark SparkSession.builder.appName("SortMergeJoinExample&quo…

SpringBoot:SaToken的options预检请求鉴权失败

问题描述 使用如下sa-token配置&#xff0c;前端通过IP端口号的方式访问后端服务&#xff0c;会存在options预检请求鉴权失败的问题。 问题分析 http-options请求 HTTP OPTIONS 方法请求给定的 URL 或服务器的允许通信选项。客户端可以用这个方法指定一个 URL&#xff0c;或者…

MFC界面库ToolkitPro v15.3.1的编译和使用教程(支持VS2015和VS2017)

一、ToolkitPro v15.3.1库的下载 界面库全称为Codejock Xtreme Toolkit Pro&#xff0c;目前可以免费使用的版本为v15.3.1&#xff0c;可以在CSDN上搜索下载&#xff0c;有很多&#xff0c;比如 https://download.csdn.net/download/nizheng96/11151867 二、ToolkitPro v15.3…

IDEA的Java注释在Toggle Rendered View下的字号调整方式

记录IntelliJ IDEA的Java注释在Toggle Rendered View下的字号调整方式 如图&#xff0c;在Toggle Rendered View模式下的注释字号很大&#xff0c;与代码不协调&#xff0c;在此区域点击鼠标右键&#xff0c;选中 Adjust 出现一个滑动条&#xff0c;通过拖动游标调整字号大小…