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

本文介绍了log4j日志框架的三大核心组件:Loggers、Appenders和Layouts,详细讲解了如何配置日志级别、输出位置及格式。在企业项目中,通常会设置INFO级别,并配置多个日志文件,如common-error.log,根据模块分别记录。通过DailyRollingFileAppender实现按天生成日志,并使用PatternLayout自定义输出格式。

来源:程序汪公众号

 

<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>

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值