当前位置: 代码迷 >> 综合 >> log4j2 slf4j 日志配置
  详细解决方案

log4j2 slf4j 日志配置

热度:106   发布时间:2023-11-01 03:00:59.0

Log4j – Configuring Log4j 2 建议看官方文档

maven配置依赖

<!-- Log4j2 门面API-->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.14.1</version>
</dependency>
<!-- Log4j2 日志实现 -->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.14.1</version>
</dependency>
<!--使用slf4j作为日志的门面,使用log4j2来记录日志 -->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.30</version>
</dependency>
<!--为slf4j绑定日志实现 log4j2的适配器 -->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.12.1</version>
</dependency>
<!--异步日志依赖-->
<dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>3.4.4</version>
</dependency>

log4j2默认加载classpath下的 log4j2.xml 文件中的配置。事实上log4j2可以通过 XML、JSON、YAML 或properties格式进行配置:

log4j定义了以下的日志的级别:

  1. fatal 指出每个严重的错误事件将会导致应用程序的退出。

  2. error 指出虽然发生错误事件,但仍然不影响系统的继续运行。

  3. warn 表明会出现潜在的错误情形。

  4. info 一般和在粗粒度级别上,强调应用程序的运行全程。

  5. debug 一般用于细粒度级别上,对调试应用程序非常有帮助。

  6. trace 是程序追踪,可以用于输出程序运行中的变量,显示执行的流程。

还有两个特殊的级别:OFF,可用来关闭日志记录。 ALL,启用所有消息的日志记录。

一般情况下,我们只使用4个级别,优先级从高到低为 ERROR > WARN > INFO > DEBUG。

Log4j 将提供默认配置。DefaultConfiguration 类中提供的默认配置将设置:

  • %d{HH:mm:ss.SSS} ,表示输出到毫秒的时间

  • %t,输出当前线程名称

  • %-5level,输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0

  • %logger,输出logger名称,因为Root Logger没有名称,所以没有输出

  • %msg,日志文本

  • %n,换行

其他常用的占位符有:

  • %F,输出所在的类文件名,如Client.java

  • %L,输出行号

  • %M,输出所在方法名

  • %l,输出语句所在的行数, 包括类名、方法名、文件名、行数

<?xml version="1.0" encoding="UTF-8"?>
<!--monitorInterval 默认多长时间自动获取配置-->
<Configuration status="warn" monitorInterval="5"><properties><property name="LOG_HOME">D:/java/logs</property><property name="FILE_NAME">${date:yyyy-MM-dd}</property></properties><Appenders><!--在控制台中显示--><Console name="Console" target="SYSTEM_OUT"><!--显示的格式--><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L --- %m%n"/></Console><!--在文件中储存 循环储存一天一个  fileName 文件名字.filePattern 文件名重复后生成的名字--><RollingRandomAccessFile name="MyFile" fileName="${LOG_HOME}/${FILE_NAME}.log"filePattern="${LOG_HOME}/${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i.log"><!--显示的格式--><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/><Policies><!--多长时间生成一个新的LOG(按分钟)--><TimeBasedTriggeringPolicy interval="120"/><!--文件大小超过多少生成新文件--><SizeBasedTriggeringPolicy size="10 MB"/></Policies><!--默认储存多少个文件--><DefaultRolloverStrategy max="20"/></RollingRandomAccessFile></Appenders><Loggers><!--异步日志 additivity防止重复日志--><AsyncLogger name="com.czh" level="trace" additivity="false"><AppenderRef ref="MyFile"/><AppenderRef ref="Console"/></AsyncLogger><!--全局日志 level日志级别--><Root level="error"><AppenderRef ref="MyFile"/><AppenderRef ref="Console"/></Root><!--局部日志--><Logger name="mylog" level="trace" additivity="false"><AppenderRef ref="MyFile" /></Logger></Loggers>
</Configuration>

数据库log表模板

CREATE TABLE `log` (`log_id` int(11) NOT NULL AUTO_INCREMENT,`project_name` varchar(255) DEFAULT NULL COMMENT '目项名',`create_date` varchar(255) DEFAULT NULL COMMENT '创建时间',`level` varchar(255) DEFAULT NULL COMMENT '优先级',`category` varchar(255) DEFAULT NULL COMMENT '所在类的全名',`file_name` varchar(255) DEFAULT NULL COMMENT '输出日志消息产生时所在的文件名称 ',`thread_name` varchar(255) DEFAULT NULL COMMENT '日志事件的线程名',`line` varchar(255) DEFAULT NULL COMMENT '号行',`all_category` varchar(255) DEFAULT NULL COMMENT '日志事件的发生位置',`message` varchar(4000) DEFAULT NULL COMMENT '输出代码中指定的消息',PRIMARY KEY (`log_id`)
);

  相关解决方案