丨Fanny丨Cri 2020-01-31
Apache Log4j2 is an upgrade to Log4j that provides significant improvements over its predecessor, Log4j 1.x, and provides many of the improvements available in Logback while fixing some inherent problems in Logback’s architecture.
既然Log4j2相比Log4j和Logback有了这么多的优势,那么用就完事了。
Automatic Reloading of Configurations
一句话概括Loggers和Appenders之间的关系:Appenders指定输出文件的级别和输出文件的位置,Loggers指定哪些包的log由哪一个Appeders输出
<configuration monitorinterval="30">
输出方式:
%d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间,输出到毫秒的时间
%-5level : 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%c : logger的名称(%logger)
%t : 输出当前线程名称
%p : 日志输出格式
%m : 日志内容,即 logger.info("message")
%n : 换行符
%C : Java类名(%F)
%L : 行号
%M : 方法名
%l : 输出语句所在的行数, 包括类名、方法名、文件名、行数
hostName : 本地机器名
hostAddress : 本地ip地址
摘自https://www.cnblogs.com/keeya/p/10101547.html
输出源类别
Console,File,RollingFile等
公共部分
name:指定Appender的名字.
fileName:指定输出日志的目的文件带全路径的文件名.
PatternLayout:输出格式,不设置默认为:%m%n.
xml <RollingFile name="RollingFileRoot" fileName="/opt/logs/api/root.log" filePattern="/opt/logs/api/root-%d{yyyy-MM-dd}-%i.log"> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %class{36} %L %M - %msg%xEx%n"/> <Policies> <!--按天分配--> <TimeBasedTriggeringPolicy interval="1"/> <!--按大小分配--> <SizeBasedTriggeringPolicy size="1GB"/> </Policies> </RollingFile>
在maven 中引入依赖
<!--取消在starter.web中自带的spring-boot-starter-logging,在starter.web中采用的是logback--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <!--添加log4J2依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <RollingFile name="RollingFileRoot" fileName="/opt/logs/api/root.log" filePattern="/opt/logs/api/root-%d{yyyy-MM-dd}-%i.log"> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %class{36} %L %M - %msg%xEx%n"/> <Policies> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="1GB"/> </Policies> </RollingFile> <RollingFile name="RollingFileWarn" fileName="/opt/logs/api/warn.log" filePattern="/opt/logs/api/warn-%d{yyyy-MM-dd}-%i.log"> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %class{36} %L %M - %msg%xEx%n"/> <Policies> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="1GB"/> </Policies> <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --> <!--<DefaultRolloverStrategy max="20"/>--> </RollingFile> <RollingFile name="RollingFileError" fileName="/opt/logs/api/error.log" filePattern="/opt/logs/api/error-%d{yyyy-MM-dd}-%i.log"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %class{36} %L %M - %msg%xEx%n"/> <Policies> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="1GB"/> </Policies> </RollingFile> <RollingFile name="MyBatisFile" fileName="/opt/logs/api/dao.log" filePattern="/opt/logs/api/dao-%d{yyyy-MM-dd}-%i.log"> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %class{36} %L %M - %msg%xEx%n"/> <Policies> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="1GB"/> </Policies> </RollingFile> <RollingFile name="requestLog" fileName="/opt/logs/api/request.log" filePattern="/opt/logs/api/request-%d{yyyy-MM-dd}-%i.log"> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %class{36} %L %M - %msg%xEx%n"/> <Policies> <TimeBasedTriggeringPolicy interval="1"/> <SizeBasedTriggeringPolicy size="1GB"/> </Policies> </RollingFile> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="RollingFileRoot"/> <AppenderRef ref="RollingFileWarn"/> <AppenderRef ref="RollingFileError"/> </Root> <Logger name="com.xxx.api.dao" level="WARN" additivity="false"> //为dao mapper所在的包,level为TRACE <AppenderRef ref="MyBatisFile"/> </Logger> <Logger name="requestLogger" level="TRACE" additivity="false"> <AppenderRef ref="requestLog"/> </Logger> </Loggers> </Configuration>