zoukankan      html  css  js  c++  java
  • log4j2 使用纪要

    简介

    Apache Log4j 2 是Log4j 的升级版,在该版本实现中,日志的处理流程及效率有了显著提升。
    此外新版本也合入了一些logback日志框架体系的一些改进点。

    关键特性

    • API分离,接口与实现分离,便于扩展

    • 性能提升,框架基于LMAX Disruptor库实现了下一代的 Asynchronous Loggers。在多线程场景下相比log4j1.x和logback有将近18倍的性能提升,参考几近疯狂的log4j2,关于异步的参考

    • 支持多API,包括Log4j 1.2, SLF4J, Commons Logging 以及 java.util.logging (JUL) APIs.

    • 自动重载配置

    • 更高级的过滤

    • 支持插件结构,可以方便的定制格式

    • 支持系统属性配置

    • 支持自定义Level

    • 极少的垃圾回收,大大提升了响应时间

    • Java 8 Lambda 表达式支持

    • 直接与Tomcat/Jetty等应用服务器集成

    maven依赖

    <dependencies>  
        <dependency>  
            <groupId>org.apache.logging.log4j</groupId>  
            <artifactId>log4j-api</artifactId>  
            <version>2.5</version>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.logging.log4j</groupId>  
            <artifactId>log4j-core</artifactId>  
            <version>2.5</version>  
        </dependency>  
    </dependencies>  
    

    简单示例

    配置路径
    log4j2默认会在classpath目录下寻找log4j.json、log4j.jsn、log4j2.xml等名称的文件,如果都没有找到,则会按默认配置输出,也就是输出到控制台

    代码样例

    public static void main(String[] args) {  
        Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);  
        logger.trace("trace level");  
        logger.debug("debug level");  
        logger.info("info level");  
        logger.warn("warn level");  
        logger.error("error level");  
        logger.fatal("fatal level");  
    }  
    

    默认配置

    <?xml version="1.0" encoding="UTF-8"?>  
    <Configuration status="WARN">  
        <Appenders>  
            <Console name="Console" target="SYSTEM_OUT">  
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />  
            </Console>  
        </Appenders>  
        <Loggers>  
            <Root level="error">  
                <AppenderRef ref="Console" />  
            </Root>  
        </Loggers>  
    </Configuration>  
    

    格式说明

    %d{HH:mm:ss.SSS} 表示输出到毫秒的时间
    %t 				输出当前线程名称
    %-5level 		输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
    %logger 		输出logger名称,因为Root Logger没有名称,所以没有输出
    %msg 			日志文本
    %n 				换行
    %F 				输出所在的类文件名,如Client.java
    %L 				输出行号
    %M 				输出所在方法名
    %l  			输出语句所在的行数, 包括类名、方法名、文件名、行数
    

    更多格式说明

    log4j2.xml,以Configuration为根节点,有一个status属性,这个属性表示log4j2本身的日志信息打印级别。
    如果把status改为TRACE再执行测试代码,可以看到控制台中打印了一些log4j加载插件、组装logger等调试信息。

    实用配置

    在生产系统中通常需要定义不同模块的日志,此外日志文件的Rolling也需要做相应配置。
    一种比较常见的需求是按日期和大小(两者满足其一)则产生日志滚动。通过log4j2可以轻松的实现。

    配置示例

    <Configuration status="WARN" monitorInterval="300">  
        <properties>  
            <property name="LOG_ROOT">/var/log/app</property>  
            <property name="FILE_NAME">application</property>  
        </properties>  
        <Appenders>  
            <Console name="Console" target="SYSTEM_OUT">  
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS}–[%t] %-5level -%l - %msg%n" />  
            </Console>  
            <RollingRandomAccessFile name="MainFile"  
                fileName="${LOG_ROOT}/${FILE_NAME}.log"  
                filePattern="${LOG_ROOT}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd HH}-%i.log">  
                <PatternLayout  
                    pattern="%d{yyyy-MM-dd HH:mm:ss.SSS}–[%t] %-5level -%l - %msg%n" />  
                <Policies>  
                    <TimeBasedTriggeringPolicy interval="1" />  
                    <SizeBasedTriggeringPolicy size="50 MB" />  
                </Policies>  
                <DefaultRolloverStrategy max="20" />  
            </RollingRandomAccessFile>  
        </Appenders>  
      
        <Loggers>  
            <Logger name="main" level="trace" additivity="false">  
                <AppenderRef ref="MainFile" />  
            </Logger>  
            <Root level="error">  
                <AppenderRef ref="Console" />  
                <AppenderRef ref="MainFile" />  
            </Root>  
        </Loggers>  
    </Configuration>  
    

    说明

    • Configuration.status 指定log4j本身日志为warn级别,monitorInterval指定5分钟检查配置是否发生变更(支持重载)
    • properties定义了相关变量配置,包括目录、文件名称
    • Root级别为error,指定输出到Console
    • mylog配置了一个自定义Appender,RollingRandomAccessFile支持按时间和大小实现滚动
      TimeBasedTriggeringPolicy 与filePattern匹配,每个小时生成一个文件
      SizeBasedTriggeringPolicy 指定每50M生成一个文件
      DefaultRolloverStrategy max=20指定按大小滚动时最多个数

    log4j2整合slf4j

           <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>2.9.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.9.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-slf4j-impl</artifactId>
                <version>2.9.1</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.25</version>
            </dependency>
    
    

    参考文档

    Log4j2基础到实践
    RollingFileAppender定义
    web应用程序集成
    Springboot集成slf4j-log4j2

  • 相关阅读:
    nginx-1.8.1的安装
    ElasticSearch 在3节点集群的启动
    The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files
    sqoop导入导出对mysql再带数据库test能跑通用户自己建立的数据库则不行
    LeetCode 501. Find Mode in Binary Search Tree (找到二叉搜索树的众数)
    LeetCode 437. Path Sum III (路径之和之三)
    LeetCode 404. Sum of Left Leaves (左子叶之和)
    LeetCode 257. Binary Tree Paths (二叉树路径)
    LeetCode Questions List (LeetCode 问题列表)- Java Solutions
    LeetCode 561. Array Partition I (数组分隔之一)
  • 原文地址:https://www.cnblogs.com/littleatp/p/9260784.html
Copyright © 2011-2022 走看看