基础使用
依赖
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>1.7.25version>
dependency>
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
<version>1.2.3version>
dependency>
导包
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Test
public void test01(){
Logger logger = LoggerFactory.getLogger(LOGBACKTest.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
输出结果:logback默认输出格式
11:21:36.810 [main] ERROR com.xc.mylog.LOGBACKTest - error信息
11:21:36.812 [main] WARN com.xc.mylog.LOGBACKTest - warn信息
11:21:36.812 [main] INFO com.xc.mylog.LOGBACKTest - info信息
11:21:36.812 [main] DEBUG com.xc.mylog.LOGBACKTest - debug信息
Process finished with exit code 0
使用logback.xml
<configuration>
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"/>
<property name="logDir" value="D://test"/>
<appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
<file>${logDir}/logback.logfile>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}pattern>
encoder>
appender>
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<target>
System.err
target>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}pattern>
encoder>
appender>
<root level="ALL">
<appender-ref ref="consoleAppender"/>
<appender-ref ref="fileAppender"/>
root>
configuration>
@Test
public void test02(){
Logger logger = LoggerFactory.getLogger(LOGBACKTest.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
输出结果:
[ERROR] 2022-06-26 20:26:07.401 com.xc.mylog.LOGBACKTest test01 24 main error信息
[WARN ] 2022-06-26 20:26:07.403 com.xc.mylog.LOGBACKTest test01 25 main warn信息
[INFO ] 2022-06-26 20:26:07.404 com.xc.mylog.LOGBACKTest test01 26 main info信息
[DEBUG] 2022-06-26 20:26:07.404 com.xc.mylog.LOGBACKTest test01 27 main debug信息
[TRACE] 2022-06-26 20:26:07.404 com.xc.mylog.LOGBACKTest test01 28 main trace信息
Process finished with exit code 0
执行两次查看文件输出内容:
日志拆分和归档压缩
logback.xml
<configuration>
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"/>
<property name="logDir" value="D://test"/>
<appender name="roll" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}pattern>
encoder>
<file>${logDir}/roll_logback.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${logDir}/roll.%d{yyyy-MM-dd}.log%i.gzfileNamePattern>
<maxFileSize>100KBmaxFileSize>
rollingPolicy>
appender>
<root level="ALL">
<appender-ref ref="roll"/>
root>
configuration>
@Test
public void test03(){
for (int i = 0; i < 1000; i++) {
Logger logger = LoggerFactory.getLogger(LOGBACKTest.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
}
26日,27日分别执行一次,文件拆分输出结果:
当前日志为roll_bogback.log,当日志文件超过100k或者切换日期则会压缩成日期格式gz
日志进行更细粒度的打印控制
logback.xml
<configuration>
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"/>
<appender name="consoleFilterAppender" class="ch.qos.logback.core.ConsoleAppender">
<target>
System.err
target>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}pattern>
encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERRORlevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
appender>
<root level="ALL">
<appender-ref ref="consoleFilterAppender"/>
root>
configuration>
@Test
public void test04(){
Logger logger = LoggerFactory.getLogger(LOGBACKTest.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
输出结果:
[ERROR] 2022-06-26 22:43:54.133 com.xc.mylog.LOGBACKTest test06 148 main error信息
Process finished with exit code 0
自定义logger
additivity=“false” 表示不继承rootlogger
<logger name="com.xc" level="info" additivity="false">
<appender-ref ref="consoleAppender"/>
logger>
<configuration>
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"/>
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<target>
System.err
target>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}pattern>
encoder>
appender>
<appender name="asyncAppender" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="consoleAppender"/>
appender>
<root level="ALL">
<appender-ref ref="asyncAppender"/>
root>
configuration>
@Test
public void test05(){
Logger logger = LoggerFactory.getLogger(LOGBACKTest.class);
//日志打印操作
for (int i = 0; i < 100; i++) {
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
//系统本身业务相关的其他操作
System.out.println("1----------------------");
System.out.println("2----------------------");
System.out.println("3----------------------");
System.out.println("4----------------------");
System.out.println("5----------------------");
}
输出结果:日志和业务代码交替执行
[ERROR] 2022-06-26 22:56:29.948 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
1----------------------
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
2----------------------
3----------------------
4----------------------
5----------------------
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
Process finished with exit code 0
性能提升
自动重新加载配置
高级过滤
无垃圾机制
基础使用
依赖
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-apiartifactId>
<version>2.12.1version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-coreartifactId>
<version>2.12.1version>
dependency>
导包
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@Test
public void test01(){
Logger logger = LogManager.getLogger(Log4j2Test.class);
logger.fatal("fatal信息");
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
输出结果:
//警告
//表示我们还没有建立自己的配置文件,如果没有建立配置文件,则使用默认的配置
ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
20:32:32.558 [main] FATAL com.xc.mylog.Log4j2Test - fatal信息
20:32:32.561 [main] ERROR com.xc.mylog.Log4j2Test - error信息
Process finished with exit code 0
基础配置文件使用
默认路径:resources/log4j2.xml
<Configuration>
<Appenders>
<Console name="consoleAppender" target="SYSTEM_OUT"/>
Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="consoleAppender"/>
Root>
Loggers>
Configuration>
@Test
public void test02(){
Logger logger = LogManager.getLogger(Log4j2Test.class);
logger.fatal("fatal信息");
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
输出结果:
fatal信息
error信息
warn信息
info信息
debug信息
trace信息
Process finished with exit code 0
当今市场上的最强大,最主流的日志使用搭配方式:slf4j+log4j2
依赖
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>1.7.25version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-slf4j-implartifactId>
<version>2.12.1version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-apiartifactId>
<version>2.12.1version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-coreartifactId>
<version>2.12.1version>
dependency>
导包
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
log4j2.xml
<Configuration>
<Appenders>
<Console name="consoleAppender" target="SYSTEM_OUT"/>
Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="consoleAppender"/>
Root>
Loggers>
Configuration>
@Test
public void test03(){
Logger logger = LoggerFactory.getLogger(Log4j2Test.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
输出结果:
error信息
warn信息
info信息
debug信息
trace信息
Process finished with exit code 0
日志拆分
log4j2.xml
<Configuration>
<properties>
<property name="logDir">D://testproperty>
properties>
<Appenders>
<RollingFile name="rollingFile" fileName="${logDir}/rollog.log"
filePattern="${logDir}/$${date:yyyy-MM-dd}/rollog-%d{yyyy-MM-dd-HH-mm}-%i.log">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n"/>
<Policies>
<OnStartupTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="10KB"/>
<TimeBasedTriggeringPolicy/>
Policies>
<DefaultRolloverStrategy max="20"/>
RollingFile>
Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="rollingFile"/>
<AppenderRef ref="consoleAppender"/>
Root>
Loggers>
Configuration>
@Test
public void test05(){
Logger logger = LoggerFactory.getLogger(Log4j2Test.class);
for (int i = 0; i < 2000; i++) {
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
}
输出文件结果: