Log4j扩展使用--日志格式化器Layout

源地址https://blog.csdn.net/u011794238/article/details/50720100

Log4j扩展使用--日志格式化器Layout


  • Layout:格式化输出日志信息

OK,前面我已经知道了。Appender必须使用一个与之相关联的Layout,这样才能知道怎样格式化输出日志信息。

日志格式化器Layout负责格式化日志信息,方法log.error()的参数只包含日志信息,利用Layout可以附加其他信息,以输出更多的信息或者布局显示。


  • Log4j具有几种类型的Layout
PatternLayout:根据指定的转换模式格式化日志输出

HTMLLayout:格式化日志输出为HTML表格

XMLLayout:格式化日志输出为XML文件

SimpleLayout:以一种非常简单的方式格式化日志输出

TTCCLayout:包含日志产生的时间、线程、类别等信息


  • 实际编码中,我们使用最多的就是PatternLayout布局。

这里我们详细整理下该日志格式化器。PatternLayout是最常用的格式化器,用户可以自定义信息,比如日期,时间,所在的线程,类型,方法名等等。

下面是一份PatternLayout的配置文件。


 
 
  1. # 以下是rootLogger的配置,子类默认继承,但是子类重写下面配置=rootLogger+自己配置,我晕
  2. #输出到控制台
  3. log4j.appender.console=org.apache.log4j.ConsoleAppender
  4. #设置输出样式
  5. log4j.appender.console.layout=org.apache.log4j.PatternLayout
  6. #日志输出信息格式为
  7. log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n
  8. #DEBUG以上级别输出,Threshold,入口,临界值
  9. #log4j.appender.console.Threshold=DEBUG
  10. #日志编码方式
  11. #log4j.appender.console.Encoding=UTF-8
  12. #是否立即输出
  13. #log4j.appender.console.ImmediateFlush=true
  14. #使用System.error作为输出
  15. #log4j.appender.console.Target=System.error

  • 使用ConversionPattern自定义样式

关于ConversionPattern该属性的说明,该属性设置了日志输出的格式,具体的参数如下:


 
 
  1. #自定义样式
  2. #%c 输出所属的类目,通常就是所在类的全名
  3. #%C 输出Logger所在类的名称,通常就是所在类的全名
  4. #%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},%d{ABSOLUTE},%d{DATE}
  5. #%F 输出所在类的类名称,只有类名。
  6. #%l 输出语句所在的行数,包括类名+方法名+文件名+行数
  7. #%L 输出语句所在的行数,只输出数字
  8. #%m 输出代码中指定的讯息,如log(message)中的message
  9. #%M 输出方法名
  10. #%p 输出日志级别,即DEBUG,INFO,WARN,ERROR,FATAL
  11. #%r 输出自应用启动到输出该log信息耗费的毫秒数
  12. #%t 输出产生该日志事件的线程名
  13. #%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
  14. #%% 用来输出百分号“%”
  15. #log4j.appender.Linkin.layout.ConversionPattern=%n[%l%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m
  16. #log4j.appender.Linkin.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[%C]-[%p] %m%n
  17. #log4j.appender.Linkin.layout.ConversionPattern = %d{ABSOLUTE} %5p %t %c{2}:%L - %m%n

  • 关于该PatternLayout格式化器的补充:

1,Log4j能输出形形色色的参数,这些参数内容的长度不同。比如%C输出的类名,有的类名很长,有的类名很短,这会导致日志比较凌乱。为了解决该问题,Log4j允许设置输出内容的长度等,不够长的会用空格补齐,使输出内容变得整齐。

2,设置方法是在%与参数符号间添加数字,例如%20p,%-20p等。正数表示右对齐,负数表示左对齐,数字表示最小宽度,不足时用空格补齐。

3,还可以设置最大宽度,如果超出,则截取,方法是用小数点+数字设置,例如%.30p。






  • 关于HTMLLayout,XMLLayout这里只做一个简单的介绍。
HTMLLayout将日志格式化为HTML代码,输出到文件后,可以直接用浏览器浏览。使用该格式化器时,日志文件后缀一般为.html。
配置如下:

 
 
  1. #输出到文件(这里默认为追加方式)
  2. log4j.appender.file=org.apache.log4j.FileAppender
  3. #输出文件位置
  4. log4j.appender.file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/log4j.log
  5. #是否在原日志基础上追加输出日志。true,默认,追加。false,清掉原来日志重新添加
  6. log4j.appender.file.Append=true
  7. #样式为TTCCLayout
  8. #log4j.appender.file.layout=org.apache.log4j.TTCCLayout
  9. #样式为HTMLLayout
  10. log4j.appender.file.layout=org.apache.log4j.HTMLLayout
  11. log4j.appender.file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/log4j.html
  12. #log4j.appender.file.layout=org.apache.log4j.PatternLayout
  13. #log4j.appender.file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n

运行我们的测试代码,然后生成了log4j.html。用浏览器打开查看日志内容:


XMLLayout把日志内容格式化成XML文件,XML文件的好处就是解析比较容易,因为有现成的DOM技术和SAX技术。配置时候只需要将appender的layout设置为XMLLayout即可。

值得注意的是:XMLLayout生成的并不是完整的XML文件,而只是XML文件的一部分,因此是无法直接打开和解析的。


OK,到目前为止,有关Log4j的使用和配置我都整理完了。这里来总结一下:

1,Java代码中获取Logger。通过org.apache.log4j.Logger类的getLogger()方法即可。

public static Logger log = Logger.getLogger(Log4jTest1.class);
 
 

当然如果我们在配置Log4j的时候,如果配置文件路径没有按照约定加入到classpath中的话,我们也可以通过Java代码去加载该配置文件。


 
 
  1. BasicConfigurator.configure():自动快速地使用缺省Log4j环境。
  2. PropertyConfigurator.configure(StringconfigFilename):读取使用Java的特性文件编写的配置文件。
  3. DOMConfigurator.configure(Stringfilename):读取XML形式的配置文件。

最后我们就可以直接使用日志对象来输出日志了。调用log对象的各种输出日志方法,比如debug(),比如info()方法等等。

2,配置Log4j。要使用配置文件才能配置Log4j→log4j.xml配置文件后者log4j.properties配置文件

通常,我们都提供一个名为log4j.properties的文件,在第一次调用到Log4J时,Log4J会在类路径(../web-inf/class/当然也可以放到其它任何目录,只要该目录被包含到类路径中即可)中定位这个文件,并读入这个文件完成的配置。这个配置文

件告诉Log4J以什么样的格式、把什么样的信息、输出到什么地方。


最后这里贴出一份最完整的log4j.properties文件。


 
 
  1. # 可设置级别:TRACE→DEBUG→INFO→WARNING→ERROR→FATAL→OFF
  2. # 高级别level会屏蔽低级别level。
  3. # debug:显示debug、info、error
  4. # info:显示info、error
  5. #log4j.rootLogger=DEBUG,console,file
  6. #子类重新定义日志级别,logger的名字是日志类的权限类名
  7. #log4j.logger.org.linkinpark.commons.logtest.Log4jTest1=ERROR
  8. #子类重新定义日志级别,category的名字是日志类的包名,可以将category理解为Java的package。
  9. #log4j.category.org.linkinpark.commons.logtest1=ERROR,file,rolling_file,daily_rolling_file
  10. log4j.rootLogger=DEBUG,console,daily_rolling_file
  11. # 以下是rootLogger的配置,子类默认继承,但是子类重写下面配置=rootLogger+自己配置,我晕
  12. #输出到控制台
  13. log4j.appender.console=org.apache.log4j.ConsoleAppender
  14. #设置输出样式
  15. log4j.appender.console.layout=org.apache.log4j.PatternLayout
  16. #日志输出信息格式为
  17. log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n
  18. #DEBUG以上级别输出,Threshold,入口,临界值
  19. #log4j.appender.console.Threshold=DEBUG
  20. #日志编码方式
  21. #log4j.appender.console.Encoding=UTF-8
  22. #是否立即输出
  23. #log4j.appender.console.ImmediateFlush=true
  24. #使用System.error作为输出
  25. #log4j.appender.console.Target=System.error
  26. #输出到文件(这里默认为追加方式)
  27. log4j.appender.file=org.apache.log4j.FileAppender
  28. #输出文件位置
  29. log4j.appender.file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/log4j.log
  30. #是否在原日志基础上追加输出日志。true,默认,追加。false,清掉原来日志重新添加
  31. log4j.appender.file.Append=true
  32. #样式为TTCCLayout
  33. #log4j.appender.file.layout=org.apache.log4j.TTCCLayout
  34. #样式为HTMLLayout
  35. log4j.appender.file.layout=org.apache.log4j.HTMLLayout
  36. log4j.appender.file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/log4j.html
  37. #log4j.appender.file.layout=org.apache.log4j.PatternLayout
  38. #log4j.appender.file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n
  39. #按大小滚动文件(这里默认为追加方式)
  40. log4j.appender.rolling_file=org.apache.log4j.RollingFileAppender
  41. #输出文件位置
  42. log4j.appender.rolling_file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/rolling_log4j.log
  43. log4j.appender.rolling_file.Append=true
  44. #文件达到最大值自动更名
  45. log4j.appender.rolling_file.MaxFileSize=1KB
  46. #最多备份100个文件
  47. log4j.appender.rolling_file.MaxBackupIndex=100
  48. log4j.appender.rolling_file.layout=org.apache.log4j.PatternLayout
  49. log4j.appender.rolling_file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n
  50. #按日期滚动文件
  51. log4j.appender.daily_rolling_file=org.apache.log4j.DailyRollingFileAppender
  52. #输出文件位置
  53. log4j.appender.daily_rolling_file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/daily_rolling_log4j.log
  54. #文件滚动日期格式
  55. #每天:.YYYY-MM-dd(默认)
  56. #每星期:.YYYY-ww
  57. #每月:.YYYY-MM
  58. #每隔半天:.YYYY-MM-dd-a
  59. #每小时:.YYYY-MM-dd-HH
  60. #每分钟:.YYYY-MM-dd-HH-mm
  61. #log4j.appender.daily_rolling_file.DatePattern=.yyyy-MM-dd
  62. log4j.appender.daily_rolling_file.DatePattern=.YYYY-MM-dd-HH-mm
  63. log4j.appender.daily_rolling_file.layout=org.apache.log4j.PatternLayout
  64. log4j.appender.daily_rolling_file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n
  65. #自定义样式
  66. #%c 输出所属的类目,通常就是所在类的全名
  67. #%C 输出Logger所在类的名称,通常就是所在类的全名
  68. #%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},%d{ABSOLUTE},%d{DATE}
  69. #%F 输出所在类的类名称,只有类名。
  70. #%l 输出语句所在的行数,包括类名+方法名+文件名+行数
  71. #%L 输出语句所在的行数,只输出数字
  72. #%m 输出代码中指定的讯息,如log(message)中的message
  73. #%M 输出方法名
  74. #%p 输出日志级别,即DEBUG,INFO,WARN,ERROR,FATAL
  75. #%r 输出自应用启动到输出该log信息耗费的毫秒数
  76. #%t 输出产生该日志事件的线程名
  77. #%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
  78. #%% 用来输出百分号“%”
  79. #log4j.appender.Linkin.layout.ConversionPattern=%n[%l%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m
  80. #log4j.appender.Linkin.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[%C]-[%p] %m%n
  81. #log4j.appender.Linkin.layout.ConversionPattern = %d{ABSOLUTE} %5p %t %c{2}:%L - %m%n


				<script>
					(function(){
						function setArticleH(btnReadmore,posi){
							var winH = $(window).height();
							var articleBox = $("div.article_content");
							var artH = articleBox.height();
							if(artH > winH*posi){
								articleBox.css({
									'height':winH*posi+'px',
									'overflow':'hidden'
								})
								btnReadmore.click(function(){
									if(typeof window.localStorage === "object" && typeof window.csdn.anonymousUserLimit === "object"){
										if(!window.csdn.anonymousUserLimit.judgment()){
											window.csdn.anonymousUserLimit.Jumplogin();
											return false;
										}else if(!currentUserName){
											window.csdn.anonymousUserLimit.updata();
										}
									}
									
									articleBox.removeAttr("style");
									$(this).parent().remove();
								})
							}else{
								btnReadmore.parent().remove();
							}
						}
						var btnReadmore = $("#btn-readmore");
						if(btnReadmore.length>0){
							if(currentUserName){
								setArticleH(btnReadmore,3);
							}else{
								setArticleH(btnReadmore,1.2);
							}
						}
					})()
				</script>
				</article>

#我是小R

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Log4j比较全面的配置 log4j.rootLogger=DEBUG,CONSOLE,A1,im log4j.addivity.org.apache=true # 应用于控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=DEBUG log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n #log4j.appender.CONSOLE.layout.ConversionPattern= [start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n #应用于文件 log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=file.log log4j.appender.FILE.Append=false log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n # Use this layout for LogFactor 5 analysis # 应用于文件回滚 log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLING_FILE.Threshold=ERROR log4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用变量${java.home}、rolling.log log4j.appender.ROLLING_FILE.Append=true //true:添加 false:覆盖 log4j.appender.ROLLING_FILE.MaxFileSize=10KB //文件最大尺寸 log4j.appender.ROLLING_FILE.MaxBackupIndex=1 //备份数 log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n #应用于socket log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender log4j.appender.SOCKET.RemoteHost=localhost log4j.appender.SOCKET.Port=5001 log4j.appender.SOCKET.LocationInfo=true # Set up for Log Facter 5 log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout log4j.appender.SOCET.layout.ConversionPattern= [start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n # Log Factor 5 Appender log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000 # 发送日志给邮件 log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.ap

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值