Log4j配置之简单教程

        Log4j log for java(java的日志) 是java主流的日志框架,提供各种类型,各种存储,各种格式,多样化的日志服务;

        本人常用的就是在项目中用来记录会发生错误的信息,方便利于查看错误问题,还有就是在爬虫时,用来记录排查爬数据时的错误信息。

具体请参考Log4j百度百科 :https://baike.baidu.com/item/log4j/480673?fr=aladdin

Log4j基本配置;

根配置语法 :把指定级别的日志信息输出到指定的一个或者多个位置
log4j.rootLogger=DEBUG, Console ,File  

#Console  输出到控制台

log4j.appender.Console=org.apache.log4j.ConsoleAppender  

log4j.appender.Console.layout=org.apache.log4j.PatternLayout  

log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

#File 把日志输出到文件

log4j.appender.File = org.apache.log4j.FileAppender

log4j.appender.File.File = C://log2.log   //指定文件存放位置

log4j.appender.File.layout = org.apache.log4j.PatternLayout

log4j.appender.File.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n

Log4j 根配置语法

log4j.rootLogger = [ INFO] , appenderName, stdout , R, …        把指定级别的日志信息输出到指定的一个或者多个位置

(百科介绍)此句为将等级为INFO的日志信息输出到stdout和R这两个目的地,stdout和R的定义在下面的代码,可以任意起名。等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则不打出任何信息,如果配置为INFO这样只显示INFO、WARN、ERROR的log信息,而DEBUG信息不会被显示

Log4j根据日志信息的重要程度,分OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 。当然再细分的话 还有 FATAL(严重错误),但是Log4j官方建议实际实用的话,Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG

Log4j官方的Appender 为日志输出目的地,Log4j提供的appender有以下几种:

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

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

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

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

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

实际开发我们大多使用第1,3,4种实现

假如日志数据量不是很大,我们可以用DailyRollingFileAppender 每天产生一个日志,方便查看;

假如日志数据量很大,我们一般用RollingFileAppender,固定尺寸的日志,假如超过了 就产生一个新的文件;

下面给出项目中常用的四种log4j日志配置:

log4j.rootLogger=DEBUG, Console ,File ,DailyRollingFile ,RollingFile
    
#Console  输出到控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
    
#File    输出到日志文件
log4j.appender.File = org.apache.log4j.FileAppender
log4j.appender.File.File = C://log2.log
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
 
#DailyRollingFile   每天产生一个日志文件
log4j.appender.DailyRollingFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.DailyRollingFile.File = C://log3.log
log4j.appender.DailyRollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.DailyRollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
 
#RollingFile    设置日志文件数量  大小
log4j.appender.RollingFile = org.apache.log4j.RollingFileAppender
log4j.appender.RollingFile.File = C://log4.log
log4j.appender.RollingFile.MaxFileSize=5KB
log4j.appender.RollingFile.MaxBackupIndex=5
log4j.appender.RollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n

在配置RollingFile时有两个新的配置项解释下:

MaxFileSize 是日志文件的最大尺寸;根据实际需求来定 10KB 100KB也行

MaxBackupIndex是日志文件的个数,超过了该数量,则覆盖,主要考虑时硬盘容量问题;根据实际需求来定 比如 100  500;

Log4j提供的Layout日志输出格式,有以下几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),  

org.apache.log4j.PatternLayout(可以灵活地指定布局模式),  

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),  

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

在真正使用的时候,我们最常用的还是PatternLayout输出,它可以很灵活的进行指定我们想要的输出格式,本人也比较喜欢使用:

 Log4J中打印格式格式化日志信息,如下

%m   输出代码中指定的消息
%p   输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
%r   输出自应用启动到输出该log信息耗费的毫秒数 
%c   输出所属的类目,通常就是所在类的全名 
%t   输出产生该日志事件的线程名 
%n   输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” 
%d   输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日  22 : 10 : 28 , 921  
%l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Log4Test.main(Log4Test.java: 10 )

有时候我们需要把一些报错ERROR日志单独存到指定文件,这样有利于我们方便查看,排查错误 。这时候,Threshold属性就派上用场了;Threshold属性可以指定日志level 。

Log4j根据日志信息的重要程度,分OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL

比如我们指定某个appender的Threshold为WARN,那这个appender输出的日志信息就是WARN级别以及WARN以上的级别; 

假如我们指定的是ERROR,那这个就输出ERROR或者FATAL日志信息;

但是有个前提  rootLogger里配置的level比如小于Threshold层级  否则无效 还是按照总的rootLogger里的level来输出,一般我们实际实用的话 rootLogger里配置DEBUG,然后某个文件专门存储ERRO日志,就配置下Threshold为ERROR,这个就是我们的最佳实践,不能随便配置,导致最后结果并不是我们想要的结果。

下面我们给下参考配置:

log4j.rootLogger=DEBUG, Console ,DFile ,EFILE
   
#Console  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.TTCCLayout  

#DEBUGFile
log4j.appender.DFile = org.apache.log4j.FileAppender
log4j.appender.DFile.File = C://DEBUG.log
log4j.appender.DFile.layout = org.apache.log4j.PatternLayout
log4j.appender.DFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
log4j.appender.DFile.Threshold = DEBUG

#ERRORFile
log4j.appender.EFILE = org.apache.log4j.FileAppender
log4j.appender.EFILE.File = C://ERROR.log
log4j.appender.EFILE.layout = org.apache.log4j.PatternLayout
log4j.appender.EFILE.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
log4j.appender.EFILE.Threshold = ERROR

在上面实例中,我们在rootLogger里配置DEBUG,DFile的Threshold 配置为DEBUG,EFILE的Threshold 配置为ERROR,只输入ERROR信息;

有时候,不知道大家注没注意到,在Log4j中默认是不断的把日志内容追加到日志文件;那是因为有个属性 Append 默认就是true;

有时项目很大的时候,产生的日志文件也会很大,这个时候大家就可以吧Append,设置为false;

代码如下:

log4j.rootLogger=DEBUG, Console ,FIEL
   
#Console  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.TTCCLayout  


#FIEL
log4j.appender.FIEL = org.apache.log4j.FileAppender
log4j.appender.FIEL.File = C://log.log
log4j.appender.FIEL.layout = org.apache.log4j.PatternLayout
log4j.appender.FIEL.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
#log4j.appender.FIEL.Append = true   默认是为true的 
log4j.appender.FIEL.Append = false  

以上总结,并没有贴入代码例子,可能有的人不理解,但是一般在项目中我们都是根据自己的意向,来定制自己需要的日志文件,这样更好的便于自己的排查错误。

如果上面写的不对或者没有真正的解决你的需求,敬请谅解,本人也是在不断地学习进步。在此谢谢大家的互相理解!!

如果这篇文章并没有解决大家的问题,也可以参考以下文章:

https://blog.csdn.net/manmanxiaohui/article/details/79922546

https://blog.csdn.net/zhshulin/article/details/37937365

猜你喜欢

转载自blog.csdn.net/zwd926/article/details/84190217