log4j 互联网公司都在用的日志框架,好用妥妥的

Posted 我是程序汪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j 互联网公司都在用的日志框架,好用妥妥的相关的知识,希望对你有一定的参考价值。


帮朋友打个广告

  1. php开发过小程序的程序员

  2. 大佬不要接单,预算一般 

  3. 学生、无经验朋友不要接单,有违约金的,请慎重

  4. 有2年实战工作经验就可以来看看



------------log4j------学习下---------------


 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency>


不废话先记3个单词,包含关系


Loggers     记录器 (日志文件基本配置

   |

   |

     Appenders  附加器 (日志文件去哪里

          |

       |

             Layouts     布局器(日志文件输出具体格式


三大组件成就了log4j



这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出



如果是log4j.xml 核心标签

log4j

      root

            logger 

                      level          日志级别

                         appender    日志文件输出地

                                                 layout   输出具体格式


appender   一般一个日志文件就对应一个,依赖layout  file、append、                         encoding


logger   一般代码模块类路径一一对应,如  com.程序汪公司.系统.模块名                   ,依赖level  appender 

level 日志级别

root  默认日志,依赖level  appender    



----------log4j面试场景回顾----------

面试官:程序汪日志级别怎么配置

程序汪:Loggers 组件  ......

面试官程序汪日志输出位置怎么配置,日志文件是按天生成的还是什么规则

程序汪:Appenders  组件  ......DailyRollingFileAppender ......

面试官:程序汪日志的输出格式怎么配置

程序汪:Layouts     组件  ......PatternLayout ......


总结:起码你要告诉面试官是那个组件提供的能力,先说出组件然后说具体配置情况





具体聊下配置信息吧


1、配置根Logger:
log4j.rootLogger = [ level ] , appenderName1附加, appenderName2附加, … 


Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL

企业项目生产环境一般都是设置INFO 级别


Appenders  附加器 (日志文件去哪里)



2、配置日志信息输出目的地(appender):

log4j.appender.appenderName = className

appenderName:自定义appderName,在log4j.rootLogger设置中使用;

className:可设值如下:

(1)org.apache.log4j.ConsoleAppender(控制台)

(2)org.apache.log4j.FileAppender(文件)

(3)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

(4)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)



#按DatePattern输出到文件 log4j.appender.logDailyFile = org.apache.log4j.DailyRollingFileAppender log4j.appender.logDailyFile.layout = org.apache.log4j.PatternLayout log4j.appender.logDailyFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n log4j.appender.logDailyFile.Threshold = DEBUG log4j.appender.logDailyFile.ImmediateFlush = TRUE log4j.appender.logDailyFile.Append = TRUE log4j.appender.logDailyFile.File = ../Struts2/WebRoot/log/DailyFile/log4j_Struts log4j.appender.logDailyFile.DatePattern = '.'yyyy-MM-dd-HH-mm'.log' log4j.appender.logDailyFile.Encoding = UTF-8





3、配置日志信息的输出格式(Layout):

log4j.appender.appenderName.layout=className

className:可设值如下:

(org.apache.log4j.PatternLayout(可以灵活地指定布局模式,企业项目中一般都是自己定义格式)


PatternLayout选项:

ConversionPattern=%m%n:设定以怎样的格式显示消息。




配置文件

log4j.properties

log4j.xml  (我公司就是配置这个模式)



log4j.xml格式

我把关键词提取出来

log4j

appender 输出配置

layout 布局



<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >  <appender name="myConsole" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %m - %l%n" /> </layout>  <!--过滤器设置输出的级别-->  <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="levelMin" value="debug" /> <param name="levelMax" value="warn" /> <param name="AcceptOnMatch" value="true" /> </filter> </appender>   <appender name="myFile" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="D:/output.log" /><!-- 设置日志输出文件名 --> <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --> <param name="Append" value="true" /> <param name="MaxBackupIndex" value="10" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%p (%c:%L)- %m%n" /> </layout> </appender>   <!-- 我公司主要配置这个类型 --> <appender name="activexAppender" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="E:/activex.log" /> <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %m - %l%n" /> </layout> </appender>   <!-- 指定logger的设置,additivity指示是否遵循缺省的继承机制--> <logger name="com.runway.bssp.activeXdemo" additivity="false"> <priority value ="info"/> <appender-ref ref="activexAppender" /> </logger>  <!-- 根logger的设置-->    <root> <level value="${XXXXX_loggingLevel}"/> <appender-ref ref="myConsole"/> <appender-ref ref="myFile"/> </root> </log4j:configuration>



配置参数

<level value="${XXXXX_loggingLevel}"/>

这里配置一个引用变量,这样配置非常好维护


企业项目中一般会配置一个,统一把error打印进去

common-error.log

系统名-模块名A.log

系统名-模块名B.log

系统名-模块名C.log



<appender name="ERROR-APPENDER"              class="org.apache.log4j.DailyRollingFileAppender"> <param name="file" value="XXXXXX/common-error.log"/> <param name="append" value="true"/> <param name="encoding" value="GBK"/> <!--threshold 注意这里是error 指定日志消息的输出最低层次 --> <param name="threshold" value="error"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %m - %l%n" /> </layout> </appender> <appender name="XXX系统模块名-APPENDER"              class="org.apache.log4j.DailyRollingFileAppender"> <param name="file"               value="XXXXX/XXX-系统模块名.log"/> <param name="append" value="true"/> <param name="encoding" value="GBK"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern"                   value="XXXXXX"/> </layout> </appender>
    <logger name="com.公司名.系统名.web.模块名A" additivity="true"> <level value="${XXXX_loggingLevel_info}"/> <appender-ref ref="XXX系统模块名-APPENDER"/> <appender-ref ref="ERROR-APPENDER"/> </logger> <logger name="com.公司名.系统名.web.模块名B" additivity="true">     省略...... </logger> <logger name="com.公司名.系统名.web.模块名C" additivity="true"> 省略...... </logger> <root> <level value="INFO"/> <appender-ref ref="XXX-APPENDER"/> <appender-ref ref="XXXX-APPENDER"/> </root>




以上是关于log4j 互联网公司都在用的日志框架,好用妥妥的的主要内容,如果未能解决你的问题,请参考以下文章

Java日志框架:logback详解

Java日志框架:logback详解

你还在用 Logback?Log4j2 的异步性能已经无敌了,还不快试试

万字详解logback日志框架,再没这么全的了!

log4j日志框架的使用

java log4j基本配置及日志级别配置详解