Log4j2使用笔记

             log4j2是log4j的最新版,现在已经有很多公司在使用了。log4j2和log4j的优缺点对比,请自行百度。
上一篇笔记讲了关于log4j的使用。这篇笔记主要讲解log4j2的使用

一、maven依赖的配置

        log4j-core这个依赖加进来就有log4j-core和log4j-api这两个jar包了,一般开发情况下有这两个jar就可以。
但是,笔者发现spring和struts2的日志不输出。网上找了下,发现还需要log4j-web和log4j-jcl这两个jar包,因此一共需要导4个jar包。
         

下面为maven依赖xml代码


二、配置log4j2.xml

        log4j2的配置方式有多种,比如xml、json等。这里用的xml配置,我们需要把log4j2.xml这个文件放到src下。注意这个文件名必须为log4j2.xml。xml配置的方式其实不难,只要会用老版log4j的人都能看懂一点。
        配置的话可以分为2步:
              (1)配置Appenders,就是配置输出端
              (2)配置Loggers,这个就是配置比如指定包的日志级别以及Root的配置。
               注意点:定义好的输出端一定要引用才能生效
      (1)直接贴代码

   
  (2)这里重点解释下 Logger中的additivity属性
       这个属性在我看了网上好多人的博客上的解释的情况下,最后确定了他的具体作用。
   additivity表示是否需要将当前Logger的日志打印在父级的输出端上,默认是true,即默认在父级输出端上打印。
   这个Logger的父级就是root了。下面进行各种情况的分析。

       <1>. 上文中的Logger没有配置输出端,additivity为true;那么这个Logger的日志是在他父级(root)的输出端输出。
   所以在控制台可以看到debug级别的日志。
       <2>. 如果Logger没有配置输出端,additivity为false;那么他不会在他的父级的输出端输出,所以这个日志就不会输出。
   这会造成配置的这个Logger的包及子包下的所有的日志都不会输出,这个是个很危险的配置。
       <3>. 如果Logger配置在控制台输出,additivity为true;而root的输出端也有控制台,那么这个日志会打印2遍。
       <4>. 如果Logger配置在控制台输出,additivity为false;那么不会在root的输出端输出,这个日志只会打印1遍。

    通过这4种情况的分析:个人认为最佳配置为,Logger不配置输出端,additivity设为true。
        让Logger使用root的输出端输出。这样配置简单,也不会出现不打印或者多打印日志的问题。
         <Logger name="com.test" level="debug" additivity="true" />

    参考链接:http://blog.csdn.net/junshao90/article/details/8364812
        

 (3)生成的日志文件的效果图:
                

三、java代码中使用log4j2打印日志




 


 

 

 
posted @   zeng1994  阅读(696)  评论(1编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
点击右上角即可分享
微信分享提示