zoukankan      html  css  js  c++  java
  • log4j2分析总结(一)

    现在公司用log4j2 进行日志记录,我也看了相关的资料,现在进行记录学习总结下

    整体结构

    • Appenders里设置日志的输出方式、级别和格式
    • Loggers里设置全局的级别和绑定appenders里的name

    简单代码demo

    加载依赖

    登录官网,找到maven依赖

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

    新建一个log4j2.xml

    <?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="TRACE">
                <AppenderRef ref="Console" />
            </Root>
        </Loggers>
    </Configuration>
    

    新建一个测试类

        Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
        logger.trace("trance level");
        logger.debug("debug level");
        logger.info("info level");
        logger.warn("warn level");
        logger.error("error level");
        logger.fatal("fatal level");
    

    输出结果

    22:36:42.966 [main] TRACE  - trance level
    22:36:42.968 [main] DEBUG  - debug level
    22:36:42.969 [main] INFO   - info level
    22:36:42.969 [main] WARN   - warn level
    22:36:42.969 [main] ERROR  - error level
    22:36:42.969 [main] FATAL  - fatal level
    

    细节分析

    首先 我们要明白日志的级别

    日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出

    Configuration

    • Configuration为根节点,有一个status属性,这个属性表示log4j2本身的日志信息打印级别

    Appenders

    建议大家去官网看看,现在支持很多种appender,并且官网上也有示例。

    Console节点中的PatternLayout定义了输出日志时的格式

    • %d{HH:mm:ss.SSS} 表示输出到毫秒的时间

    • %t 输出当前线程名称

    • %-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0

    • %logger 输出logger名称,因为Root Logger没有名称,所以没有输出

    • %msg 日志文本

    • %n 换行

    其他的参数意义,大家遇到自行搜索

    自定义Appender

    我们发现这个log4j2是支持我们自定义的Appender的,很好的体现了开闭原则:对扩展支持,对修改关闭。再想想渣渣猿我自己写的代码,果然大神们写的代码还是很six的,这里不具体展开详细介绍,我现在对这一块也不是很熟悉

    注意事项

    大家最好结合阿里规约中日志的规约,大家自行查看。摘出其中一句话,供大家参考

    大量地输出无效日志,不利于系统性能提升,也不利于快速定位错误点。记录日志时请
    思考:这些日志真的有人看吗?看到这条日志你能做什么?能不能给问题排查带来好处?

  • 相关阅读:
    BZOJ1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
    BZOJ1031: [JSOI2007]字符加密Cipher
    关于后缀数组的实现
    BZOJ1692: [Usaco2007 Dec]队列变换
    BZOJ1725: [Usaco2006 Nov]Corn Fields牧场的安排
    POJ 2386 Lake Counting(搜索联通块)
    POJ 2386 Lake Counting(搜索联通块)
    Java演示设计模式中的写代码的代码
    Java演示设计模式中的写代码的代码
    源码映射
  • 原文地址:https://www.cnblogs.com/zhenghengbin/p/9297211.html
Copyright © 2011-2022 走看看