Log4j使用
1. 为什么需要Log4J?
(1) 在编程时经常不可避免地要使用到一些日志操作
开发阶段的调试信息
运行时的日志记录(系统运行状况) 安全审计(敏感操作的记录)
(2) 调查显示,日志代码占代码总量的4%
(3) 可以简单地使用System.out.println()语句输出日志信息,但是在发布时,通常不想在正式的版本中打印这些开发时的调试信息,于是又要手工地把这些语句删除,所以大量的这样的System.out.println()调试语句会带来麻烦。
(4) Log4J是Apache软件基金会Jakarta项目下的一个子项目,是用Java编写的优秀日志工具包。通过Log4J可以在不修改代码的情况下,方便、灵活地控制任意粒度的日志信息的开启或关闭,然后使用定制的格式,把日志信息输出到一个或多个需要的地方。
2. Log4J的下载及介绍
(1) 下载
Log4J:http://www.javaresearch.org/download/thread.jsp?column=662&thread=20936
解压后logging-log4j-1.2.9\\dist\\lib下有log4j-1.2.9.jar文件,配置到classpath中
log4e - eclipse的log4j插件:
http://www.javaresearch.org/download/thread.jsp?column=662&thread=28112
(2) log4j有三种主要组件:
Logger:日子记录器,负责处理日志记录的大部分操作
Appender:日志信息的输出目的地,负责控制日志记录操作的输出。支持的存放器有console, files, GUI components, remote socket servers, JMS, NT Event Loggers, remote UNIX Syslog daemons。一个记录器可以有多个存放器,可以通过方法addAppender来增加存放器。
Layout:日志格式化器,负责格式化Appender的输出
(3) 日志信息的优先级:日志信息的优先级从高到低有FATAL、 ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度
fatal非常严重的错误,导致系统中止。 error其它运行期错误或不是预期的条件 warn使用了不赞成使用的API info运行时产生的有意义的事件 debug系统流程中的细节信息
org.apache.log4j.ConsoleAppender: 控制台 org.apache.log4j.FileAppender: 文件
org.apache.log4j.DailyRollingFileAppender: 每天产生一个日志文件
org.apache.log4j.RollingFileAppender: 文件大小到达指定尺寸的时候产生一个新的文件
org.apache.log4j.WriterAppender: 将日志信息以流格式发送到任意指定的地方 org.apache.log4j.HTMLLayout:以HTML表格形式布局
org.apache.log4j.PatternLayout: 以灵活地指定布局模式,类似与C语言的printf函数
org.apache.log4j.SimpleLayout:包含日志信息的级别和信息字符串 org.apache.log4j.TTCCLayout:包含日志产生的时间、线程、类别等等信息 格式名 含义 %c %d 输出日志信息所属的类的全名 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss },输出类似:2002-10-18 22:10:28 %f %l %m %n %p %r %t 输出日志信息所属的类的类名 输出日志信息的语句处于它所在的类的第几行 输出代码中指定的信息,如log(message)中的message 输出一个回车换行符 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 输出自应用启动到输出该日志信息所耗费的毫秒数 输出产生该日志事件的线程名 (5) 日志信息的输出格式:输出格式则控制了日志信息的显示内容
(4) 日志信息输出目的地Appender:日志将打印到控制台还是文件中
(6) 参数的格式含义
3. 配置Log4J
(1) 定义配置文件 (log4j.properties放入根目录下)
配置根Logger,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
配置日志信息输出目的地Appender,其语法为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 …
log4j.appender.appenderName.option = valueN
配置日志信息的格式(布局),其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 …
log4j.appender.appenderName.layout.option = valueN (2) 在代码中使用Log4j
得到记录器
使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为: public static Logger getLogger( String name)
通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )
读取配置文件
当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:
BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。
PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。
DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。 3.插入记录信息(格式化日志信息)
当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:
Logger.debug ( Object message ) ; Logger.info ( Object message ) ; Logger.warn ( Object message ) ; Logger.error ( Object message ) ;
第一个log4j程序
import org.apache.log4j.*; public class TestLog4j {
static Logger logger = Logger.getLogger(TestLog4j.class.getName()); public static void main(String[] args){ BasicConfigurator.configure();
//PropertyConfigurator.configure(args[0]);//Example2关闭注释即可
//如果要用XML文件进行信息配置,可以在代码中调用DOMConfigurator()函数来进行配置 logger.debug(\"Start of the main() in TestLog4j\");
logger.info(\"Just testing a log message with priority set to INFO\"); logger.warn(\"Just testing a log message with priority set to WARN\"); logger.error(\"Just testing a log message with priority set to ERROR\"
);
logger.fatal(\"Just testing a log message with priority set to FATAL\");
logger.debug(\"End of the main() in TestLog4j\"); } }
log4j.properties文件
log4j.rootLogger=info,CONSOLE,FILE
log4j.addivity.org.apache=true
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=ERROR
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 [%t] %-5p %c %x - %m%n 或者
log4j.rootLogger=WARN, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=example.log log4j.appender.R.MaxFileSize=100KB log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n log4j.logger=WARN
分析代码
1)通过Logger类的getLogger()方法得到一个Logger类的对象。在getLogger()方法中,通常把所在的类的Class对象或是所在类的全名作为参数。
2)进行一些必要的初始化,如要把调试信息输出到哪。运用log4j,我们可以输出到许多地方,如控制台、文件、HTML文件等,我们调用自带的初始化方法来完成初始化。用这个方法进行初始化就不能体现出log4j的灵活性,所以基本上不会这样做。Log4j提供了用XML文件或Java配置文件来配置设置的方
- %c -%-4r
法
3)接着就是输出信息的代码了。
运行结果(日志信息)的意义。第一个数字是指程序开始运行到运行该日志语句所经历的毫秒数,“[main]”是日志事件发生的线程,随后的“DEBUG”、“INFO”等信息是相应日志信息的优先级别,“TestLog4j.TestLog4”是当前TestLog4所在的包和名称,最后是日志信息。
4. J2SE中使用Log4J
因篇幅问题不能全部显示,请点此查看更多更全内容