Log4J简介
日志记录功能是一个项目中重要的组成部分,Log4J是APache下的一个开源日志组件,为java开发者提供了很大的便利。
Loggers,日志信息的优先级
日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度,设置为高级别的优先级时,低优先级的日志将不会输出,比如将日志级别设置为INFO,则DEBUG级别的目录不会被记录,为了防止日志输出泛滥,最好不要将日志级别设置太低,一般为INFO即可。
Appenders,日志信息的输出目的地
日志信息的输出目的地指定了日志将打印到控制台还是文件中,参数如下:
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件,本文中的案例选择的策略)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件,也是一个不错的选择)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
Layouts,日志信息的输出格式
输出格式的功能是控制日志信息的显示内容,参数如下:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式,本案例所选择的策略,需对日志格式进行设置)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
Log4J的输出格式 :
layout中的参数都以%开始,后面不同的参数代表不同的格式化信息(参数按字母表顺序列出):
%c 输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的维(如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName)
%d 输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
%l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
%n 换行符
%m 输出代码指定信息,如info(“message”),输出message
%p 输出优先级,即 FATAL ,ERROR 等
%r 输出从启动到显示该log信息所耗费的毫秒数
%t 输出产生该日志事件的线
Log4J配置文件 :
# 配置根Logger # level是指 日志的输出级别 ,优先级从高到低分别是 ERROR 、 WARN 、 INFO 、 DEBUG 。 # appenderName 就是指日志信息输出到哪个地方。您可以同时指定多个输出目的地。 log4j.rootLogger = [ level ] , appenderName, appenderName, … # 定义日志输出目的地 # appenderName就是指日志输出的目的地,和log4j.rootLogger中的相同。 log4j.appender.appenderName=org.apache.log4j.DailyRollingFileAppender# org.apache.log4j.ConsoleAppender (控制台) # org.apache.log4j.FileAppender (文件) # org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件) # org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件) # org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)# 设置文件输出路径 mylog为日志文件的文件名,路径为根目录下的logs文件夹下的mylog.log文件 log4j.appender.appenderName.file=../logs/mylog.log# 当天的日志是mylog.log,当天过去之后,mylog.log就会重命名为mylog_yyyy-MM-dd.log ,yyyy-MM-dd为当天的日期 log4j.appender.appenderName.DatePattern='_'yyyy-MM-dd'.log'# 配置日志信息的格式(布局) log4j.appender.appenderName.layout = org.apache.log4j.PatternLayout # org.apache.log4j.HTMLLayout (以 HTML 表格形式布局) # org.apache.log4j.PatternLayout (可以灵活地指定布局模式) # org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串) # org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等等信息)# 日志信息输出格式 # [日期] 日志级别 全路径类名 行号 日志信息 log4j.appender.appenderName.layout.ConversionPattern= [%d{yyyy-MM-dd HH:mm:ss}] %-5p %c %L -%m%n# layout中的参数都以%开始,后面不同的参数代表不同的格式化信息(参数按字母表顺序列出):# - X 号 : X 信息输出时左对齐; # %p: 输出日志信息优先级,即 DEBUG , INFO , WARN , ERROR , FATAL, # %d: 输出日志时间点的日期或时间,默认格式为 ISO8601 ,也可以在其后指定格式,比如: %d{yyy MMM dd HH:mm:ss,SSS} # %r: 输出自应用启动到输出该 log 信息耗费的毫秒数 # %c: 输出日志信息所属的类目,通常就是所在类的全名 # %t: 输出产生该日志事件的线程名 # %l: 输出日志事件的发生位置,相当于 %C.%M(%F:%L) 的组合 , 包括类目名、发生的线程,以及在代码中的行数。举例: Testlog4.main(TestLog4.java:10) # %x: 输出和当前线程相关联的 NDC( 嵌套诊断环境 ), 尤其用到像 Java servlets 这样的多客户多线程的应用中。 # %%: 输出一个 "%" 字符 # %F: 输出日志消息产生时所在的文件名称 # %L: 输出代码中的行号 # %m: 输出代码中指定的消息 , 产生的日志具体信息 # %n: 输出一个回车换行符, Windows 平台为 "/r/n" , Unix 平台为 "/n" 输出日志信息换行 # 设置日志字符集编码格式 log4j.appender.appenderName.encoding=utf-8# 设置日志的输出级别,和log4j.rootLogger里面的相比 取级别高的。 log4j.appender.appenderName.Threshold = ERROR# 设置日志文件最大尺寸 log4j.appender.ROLLING_FILE.MaxFileSize=10MB
#ex:
log4j.rootLogger = ERROR , appenderName , Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern= [%d{yyyy-MM-dd HH:mm:ss}] %-5p %c %L -%m%n
log4j.appender.appenderName=org.apache.log4j.DailyRollingFileAppender
log4j.appender.appenderName.file=../logs/mylog.log
log4j.appender.appenderName.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.appenderName.layout = org.apache.log4j.PatternLayout
log4j.appender.appenderName.layout.ConversionPattern= [%d{yyyy-MM-dd HH:mm:ss}] %-5p %c %L -%m%n
log4j.appender.appenderName.encoding=utf-8
log4j.appender.appenderName.Threshold = ERROR
log4j.appender.ROLLING_FILE.MaxFileSize=10MB
java 中的应用
private static Logger logger = Logger.getLogger(this.getClass().getName);Logger.debug(Object message); // 调试信息 Logger.info(Object message); // 一般信息 Logger.warn(Object message); // 警告信息 Logger.error(Object message); // 错误信息