zoukankan      html  css  js  c++  java
  • 开始log4j 2

    我接触一项技术,会先学习如何使用它。这篇网志作为学习 log4j 2 的开始。

    2012年,log4j 进行了重大改进,重写 log4j,并将项目命名为 log4j 2,并且与 log4j 不兼容。7月发布 2.0-alpha1 版本,我用的是 2.0-beta4 版。

    第一个程序——Hello World

    public class Hello {
    
        private static Logger logger = LogManager.getLogger("com.foo.Hello");
        
        public static void main(String[] args) {
            logger.info("hello world");
        }
    }

    代码很简单,首先获得日志类实例 logger,所有的操作都将通过 logger 来完成。这里我打印了一条 info 级别的信息,log4j 2 定义了 debug、info、error 等日志级别,不同的级别调用不同的方法。

    接下来是配置日志,log4j 之前的配置文件是 log4j.properties 或是 log4j.xml,现在是 log4j2.xml。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration status="OFF">
        <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="info">
                <appender-ref ref="Console" />
            </root>
        </loggers>
    </configuration>

    配置文件很直观(比 log4j.properties 的可读性更强),简单来看,它定义了两个东西:appender 和 logger,这也是 log4j 2 的核心概念。

    appender 负责日志输出的具体实现,你可以配置一些参数,比如日志输出位置(控制台、文件、网络),日志输出格式。

    <appenders> 标签里可以配置多个appender,用 name 属性标识它们。这样,可以为不同的场景配置不同的输出实现。

    logger 这里只配了一个实例,即 root,所有未指定的实例默认交给 root 完成日志输出。日志级别配置为 info,大于或等于这个级别的日志都会被输出

    运行结果

    18:09:48.796 [main] INFO  tutorial.Hello - hello world

    <loggers> 标签里的配置也可以对应多个 logger 实例:

    <loggers>
        <logger name="tutorial.Hello" level="debug">
            <appender-ref ref="Console" />
        </logger>
        <root level="info">
            <appender-ref ref="Console" />
        </root>
    </loggers>

    如上代码,具体是通过 name 属性对应于代码中的 logger(即 Hello 类中使用的那个 logger)。

    这种方式大大提高了灵活性、场景适应能力。之前提过,不同的场景可能需要不同的输出实现,当我们要改变某个类的输出实现时,只需要在 <loggers> 标签里配置相应的输出实现即可。

  • 相关阅读:
    053(五十六)
    【leetcode❤python】 Maximum Depth of Binary Tree
    【leetcode❤python】Find the Difference
    【leetcode❤python】Binary Watch
    【leetcode❤python】Convert a Number to Hexadecimal
    【leetcode❤python】83. Remove Duplicates from Sorted List
    【leetcode❤python】66. Plus One
    【leetcode❤python】70. Climbing Stairs
    【leetcode❤python】409. Longest Palindrome
    【leetcode❤python】387. First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/huangyp/p/2990471.html
Copyright © 2011-2022 走看看