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定义了以下的日志的级别:
-
fatal 指出每个严重的错误事件将会导致应用程序的退出。
-
error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
-
warn 表明会出现潜在的错误情形。
-
info 一般和在粗粒度级别上,强调应用程序的运行全程。
-
debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
-
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`)
);