Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地(控制台、文件、GUI组件,甚至是套接口服务器),我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。—百度百科
一、Log4j基本用法
1. 添加log4j依赖(添加Log4j包)
<dependency>
<groupId>log4j
</groupId>
<artifactId>log4j
</artifactId>
<version>1.2.16
</version>
</dependency>
2. 在相关业务类中创建Logger对象
2.1创建Logger对象有两种方式,第一种是通过当前类的Class对象创建。
public class UserService {
public static final Logger logger = Logger.getLogger(UserService.class);
public void userAdd(){
}
}
2.2第二种方式则通过自定义名称创建。(不建议采用该方式)
public class UserService {
public static final Logger logger = Logger.getLogger(
"test");
public void userAdd(){
}
}
3. 在业务代码中添加日志输出代码
根据系统中日志信息的重要程度,选择logger对象不同的级别进行记录,log4j会根据配置文件(log4j.properties)中配置的日志级别来输入对应的日志。
public void userAdd(){
logger.debug(
"记录Debug级别信息......");
logger.info (
"记录Info级别信息......");
logger.warn (
"记录Warn级别信息......");
logger.error(
"记录Error级别信息......");
logger.fatal(
"记录fatal级别信息......");
}
4. 添加Log4j配置文件
Log4j中组件是通过属性文件进行配置的,该文件默认名称为log4j.properties,默认路径在src根目录下,在web项目中,通过在web.xml文件中添加log4jConfigLocation属性来修改配置文件名称及路径。
4.1 web.xml中修改log4j.properties文件名称及路径
<context-param>
<param-name>log4jConfigLocation
</param-name >
<param-value>classpath:log4j.properties
</param-value>
</context-param>
4.2 log4j.properties文件配置示例
配置输出日志的目录和输出日志的级别
log4j.rootLogger=debug,stout,DF_DEBUG,DF_ERROR
log4j.logger.cn.ship.log4j=warn,stout
log4j.logger.test = warn,stout
控制台输出
log4j.appender.stout=org.apache.log4j.ConsoleAppender
log4j.appender.stout.Target=System.out
log4j.appender.stout.layout=org.apache.log4j.PatternLayout
log4j.appender.stout.layout.ConversionPattern= [%
5p] %d{yyyy-MM-dd
HH:
mm:ss,SSS}
method:%l%n%m%n
滚动文件输出(DEBUG级别)
log4j.appender.DF_DEBUG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DF_DEBUG.File=/home/ship/log/debug.log
log4j.appender.DF_DEBUG.Threshold=DEBUG
log4j.appender.DF_DEBUG.DatePattern=
'.'yyyy-MM-dd
'
log4j.appender.DF_DEBUG.layout=org.apache.log4j.PatternLayout
log4j.appender.DF_DEBUG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
##################滚动文件输出(ERROR级别)##################
log4j.appender.DF_ERROR=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DF_ERROR.File=/home/ship/log/error.log
log4j.appender.DF_ERROR.Threshold=ERROR
log4j.appender.DF_ERROR.DatePattern='.
'yyyy-MM-dd'
log4j.appender.DF_ERROR.layout=org.apache.log4j.PatternLayout
log4j.appender.DF_ERROR.layout.ConversionPattern=%d{yyyy-MM-dd
HH:
mm:ss} [ %
t:%r ] - [ %p ] %m%n
二、Log4j组件
通过log4j结构图可以看出Log4j分别由Logger(日志写入器)、日志输出终端(Appender)、日志布局模式(Layout)三个重要组件构成。其中一个Logger对应多个Appender,一个Appender包含一种日志布局模式。
1. 日志写入器(Logger)
Logger主要负责记录日志信息,根据日志信息的重要程度,Logger对象共分为以下几种日志级别,从高到底分别为:
日志级别说明
OFF最高等级,用于关闭所有的日志记录FATAL指出每个严重的错误事件将会导致应用程序的退出ERROR指出虽然发生错误事件,但仍然不影响系统的继续允许WARN指出会出现潜在的错误情形INFO一般用于粗粒度级别上,强调应用程序的运行全程DEBUG一般用于细粒度级别上,对于调式程序非常有帮助ALL最低等级,用于打开所有日志记录
Log4j建议只使用四个级别,优先级从高到低分别是:ERROR、WARN、INFO、DEBUG。通过在这里定义级别,你可以控制应用程序中相应级别的日志信息的开关。
2. 日志输出终端(Appender)
Appender用于配置日志信息输出的目的地,Log4j提供了一下几种Appender对象:
Appender对象说明
org.apache.log4j.ConsoleAppender输入至控制台org.apache.log4j.FileAppender输入至文件org.apache.log4j.DailyRollingFileAppender输入至文件(按照指定时间生成文件)org.apache.log4j.RollingFileAppender输入至文件(按照指定文件大小生成文件)org.apache.log4j.WriterAppende将日志信息以流的方式发送到指定地点
3. 日志布局模式(Layout)
3.1 Layout负责控制日志信息输出格式,Log4j提供了以下几种布局模式:
Layout对象对象说明
org.apache.log4j.HTMLLayout已HTML表格形式布局org.apache.log4j.PatternLayout可以灵活地自定义布局org.apache.log4j.SimpleLayout包含日志信息的级别和消息字符串的简单布局org.apache.log4j.TTCCLayout包含日志产生的时间、线程、类别等等信息
3.2 如果采用PatternLayout模式,则可以通过如下参数来自定义日志格式:
参数说明
%m输入代码中指定的消息%p输出优先级,即DEBUG,INFO,WARN,ERROR%r输出自应用启动到输出该log消息耗费的毫秒数%c输出所属的类目,通常就是所在类的全名%t输出产生该日志事件的线程名%n输出一个回车换行符%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如%d{yyyy-MM-dd HH:mm:ss,SSS}%l输出日志事件的发生位置,包括类名,发生的线程,以及在代码中的函数%x输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像Java Servlet这样的多客户多线程的应用中%%输出一个”%”字符%F输出日志消息产生时所在的文件名称%L输出代码中的行号
3.3 我们也可以通过在百分号(%)与模式字符之间加上修饰符来控制最小宽度、最大宽度和对齐方式,如下:
c : 指定输出category的名称,最小宽度是20,如果category的名称小于20的话,默认右对齐。%-20c : 指定输出category的名称,最小宽度是20,如果category的名称小于20的花,“-”号指定左对齐。%.30c : 指定输出category的名称,最大宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。 .30c : 如果category的名称小于20就补空格,并且右对齐,如果其名称大于30, 就将左边多出的字符截掉。
转载请注明原文地址: https://ju.6miu.com/read-962771.html