log4j 互联网公司都在用的日志框架,好用妥妥的
Posted 我是程序汪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j 互联网公司都在用的日志框架,好用妥妥的相关的知识,希望对你有一定的参考价值。
帮朋友打个广告
------------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 布局
<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 互联网公司都在用的日志框架,好用妥妥的的主要内容,如果未能解决你的问题,请参考以下文章