Log4j 巩固及学习

Posted testDemo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Log4j 巩固及学习相关的知识,希望对你有一定的参考价值。



版本说明: log4j-1.2.17.jar    &   jdk 1.7.0_67


分三部分:

A、样例说明使用Log4j

B、对 log4j.properties 相关配置的说明

C、总结




为什么要使用 log4j来管理日志,相信用过log4j的同学都会觉得这是一个不错的工具框架,在项目开发的时候比 System.out.println 使用体验更加方便。有很多网友遇到 使用System.out.println 使主线程阻塞的情况,兄弟项目组也碰到过此类问题,目前项目中不允许使用 System.out.println 进行日志输出。


Log4j 有诸多优点:

  • 日志有多种日志等级 并可配置,

  • 可以输出到控制台、文件、GUI组件等

  • 可根据需要设置所需日志的相关属性(打印时间、日志所属代码模块、程序的行 号、线程名称等)


A、样例说明使用Log4j

优点不多说了,一个简单的例子。下面是工程目录结构图 (注:Spring 工程)

在 Java项目中也可测试,

private static Logger LOGGER = LogManager.getLogger(Log4jTest.class);


index.jsp 是测试页面,在jsp页面内引入 import="org.apache.log4j.Logger"


以下是 log4j.properties 配置:

Log4j 巩固及学习


以下是web.xml 配置:

Log4j 巩固及学习


applicationContext.xml 中没有做任何操作,只做了简单的声明。


以下加在 index.jsp,是测试代码:

Logger.getLogger(this.getClass()).fatal(" this is fatal log ...");  

Logger.getLogger(this.getClass()).error(" this is error log ...");  

Logger.getLogger(this.getClass()).info(" this is info log ...");  

Logger.getLogger(this.getClass()).debug(" this is debug log ...");  


以下是控制台打印的日志:

Log4j 巩固及学习


以下是输出至日志文件 (在 log4j.properties 可配置文件的阈值,文件大小超过阈值会生成新的日志文件,见下图) :

Log4j 巩固及学习


B、对 log4j.properties 相关配置的说明

1、日志级别

1) ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
2) Log4j建议只使用四个级别,优先级从高到低分别是 ERROR > WARN > INFO > DEBUG


2、定义日志输出的目的地,日志输出目的地主要以下几种:

1)org.apache.log4j.ConsoleAppender(控制台)
2)org.apache.log4j.FileAppender (文件)
3)org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
4)org.apache.log4j.RollingFileAppender (文件大小超过设定的阈值,产生一个新的文件,这个在这次案例就有)
5)org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意制定的地方)


3、定义日志信息格式[1]  (根据需要选择参数,也可参看样例中 log4j.properties 的配置)

 1)%t 用来输出生成该日志事件的线程的名称
 2)%p 用于输出日志事件的优先级,即DEBUG,INFO,WARN,ERROR,FATAL
 3)%r 用于输出从layout(布局)的构建到日志事件创建所经过的毫秒数
 4)%c 用于输出日志事件的category(类别),通常就是所在类的全名
 5)%F 用于输出被发出日志记录请求,其中的文件名
 6)%d 用于输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:20017年02月18日 22:10:28,921
 7)%L 用于输出日志事件的发生位置,即在代码中的行数。举例:10
 8)%l 用于输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
 9)%% 用于输出%标志
 10)%M 用于输出打印该条日志的方法名
 11)%m 用于输出代码中指定的消息
 12)%n 用于输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”



C、总结:

目前工作常用的是4种日志级别、控制台和文件输出、需注意日志文件阈值 和份数。看了网上一些资料,还有很多其他用法,比如间隔时间多长生成日志、定义sql语句的输出级别、定义具体某个包下的日志输出级别等等,这么些好玩的功能后续有时间好好玩一下。



[1] 可参看博客 http://www.cnblogs.com/godtrue/p/6442347.html,上面有更详细的介绍。上面我只选择了一部分平时用到的





以上是关于Log4j 巩固及学习的主要内容,如果未能解决你的问题,请参考以下文章

log4j漏洞分析及总结

Java深入理解及巩固 Map & Set 集合

Log4j介绍及使用

静态代码检测工具Wukong对log4J中的漏洞检测分析及漏洞修复

log4j日志处理实战

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础