java日志框架之Logback和Log4j2

文章目录

  • 1、Logback
    • 1.1、Logback简介
    • 1.2、Logback中的组件
    • 1.3、基础日志输出格式
    • 1.4、入门使用
    • 1.5、异步日志
  • 2、Log4j2
    • 2.1、Log4j2简介
    • 2.2、Log4j2特征
    • 2.3、入门使用
    • 2.4、slf4j搭配log4j2使用

1、Logback

1.1、Logback简介

  • Logback是由log4j创始人设计的又一个开源日志组件
  • Logback当前分成三个模块:logback-corelogback- classiclogback-access
  • logback-core是其它两个模块的基础模块,类似与springframework
  • logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API。使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
  • logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能

1.2、Logback中的组件

  • Logger:日志的记录器,主要用于存放日志对象,也可以定义日志类型、级别
  • Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等
  • Layout:负责把事件转换成字符串,格式化的日志信息的输出。在Logback中Layout对象被封装在encoder中。也就是说我们未来使用的encoder其实就是Layout

1.3、基础日志输出格式

  • %-10level 级别:案例为设置10个字符,左对齐
  • %d{yyyy-MM-dd HH:mm:ss.SSS}:日期
  • %c: 当前类全限定名
  • %M: 当前执行日志的方法
  • %L: 行号
  • %thread: 线程名称
  • %m或者%msg: 信息
  • %n: 换行

1.4、入门使用

基础使用

依赖


<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;
  • 日志级别:trace < debug < info < warn < error
  • 默认的日志级别是debug
@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

  • 在resources下面,创建一份配置文件,命名为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

执行两次查看文件输出内容:

  • 在文件中,默认是以追加日志的形式做记录

java日志框架之Logback和Log4j2_第1张图片

日志拆分和归档压缩

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日分别执行一次,文件拆分输出结果:

java日志框架之Logback和Log4j2_第2张图片

当前日志为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>

1.5、异步日志

  • 原理:系统会为日志操作单独的分配出来一根线程,原来用来执行当前方法的主线程会继续向下执行
  • 线程1:系统业务代码执行,线程2:打印日志,两根线程争夺CPU的使用权

<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

2、Log4j2

2.1、Log4j2简介

  • Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题
  • 被誉为是目前最优秀的Java日志框架

2.2、Log4j2特征

性能提升

  • Log4j2包含基于LMAX Disruptor库的下一代异步记录器
  • 在多线程场景中,异步记录器的吞吐量比Log4j 1.x和Logback高18倍,延迟低

自动重新加载配置

  • 与Logback一样,Log4j2可以在修改时自动重新加载其配置
  • 与Logback不同,它会在重新配置发生时不会丢失日志事件

高级过滤

  • 与Logback一样,Log4j2支持基于Log事件中的上下文数据,标记,正则表达式和其他组件进行过滤
  • 过滤器还可以与记录器关联。与Logback不同,Log4j2可以在任何这些情况下使用通用的Filter类

无垃圾机制

  • 在稳态日志记录期间,Log4j2 在独立应用程序中是无垃圾的
  • 在Web应用程序中是低垃圾

2.3、入门使用

基础使用

依赖


<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;
  • 单纯的使用Log4j2的 门面+实现
  • 默认为error级别信息的打印
@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>
  • monitorInterval=“5” 自动加载配置文件的间隔时间,不低于5秒
@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

2.4、slf4j搭配log4j2使用

当今市场上的最强大,最主流的日志使用搭配方式: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>
  • slf4j门面调用的是log4j2的门面,再由log4j2的门面调用log4j2的实现
@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信息");
    }
}

输出文件结果:

java日志框架之Logback和Log4j2_第3张图片
java日志框架之Logback和Log4j2_第4张图片

你可能感兴趣的:(java基础,log4j,java,开发语言)