admin 发表于 2017-9-30 10:32:24

Java的日志模块log4j

日志,编程中最基础也最容易被忽视的模块。据说看一个程序员编程水平的高低,看程序日志就行了。

一、Java默认提供了一个日志lib(java.util.logging),先看下默认日志库打印的日志:
java.util.logging.Logger.getLogger("").info("默认打出的日志java.util.logging.Logger");

打出来的日志长这样:

九月 30, 2017 11:38:23 上午 java.util.logging.LogManager$RootLogger log信息: 默认打出的日志java.util.logging.Logger


二、但是真正在实际工程中使用的是log4j模块(org.apache.log4j),它是Apache的一个开源项目。使用方法如下:
Logger logger = Logger.getLogger(Main.class);
logger.debug("debug_log");    //!< 记录debug信息(最低级别)
logger.info("info_log");         //!< info日志通常记录程序过程中需要跟踪或者采集数据的日志
logger.warn("warn_log");      //!< 报警日志,表明出现了潜在异常信息
logger.error("error_log");      //!< 错误日志,记录程序运行过程中的错误信息
logger.fatal("fatal log");          //!< 致命错误,通常会导致程序崩溃(最高级别)

代码调用非常简单,需要了解的是log4j的配置。默认log4j模块会加载classpath下的log4j.properties文件。一般工程中也就写在这个配置文件。重点是里面的配置。
log4j.rootLogger=info,console,infolog,errorlog
# console loglog4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.Threshold=all   #控制台输出所有日志log4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=[%5p]\t%d{YYYY-MM-dd HH\:mm\:ss}\t{%F\:%L}[%t]\t%m%n
# info log filelog4j.appender.infolog=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.infolog.File=log/main.loglog4j.appender.infolog.Threshold=info    #只输出info及info以上级别的日志log4j.appender.infolog.Append=truelog4j.appender.infolog.Encoding=UTF-8log4j.appender.infolog.DatePattern='.'yyyy-MM-dd'.log'log4j.appender.infolog.layout=org.apache.log4j.PatternLayoutlog4j.appender.infolog.layout.ConversionPattern=[%5p]\t%d{YYYY-MM-dd HH\:mm\:ss}\t{%F\:%L}[%t]\t%m%n
# error log filelog4j.appender.errorlog=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.errorlog.File=log/error.loglog4j.appender.errorlog.Threshold=error    # 只输出error和fatal级别日志log4j.appender.errorlog.Append=truelog4j.appender.errorlog.Encoding=UTF-8log4j.appender.errorlog.DatePattern='.'yyyy-MM-dd'.log'log4j.appender.errorlog.layout=org.apache.log4j.PatternLayoutlog4j.appender.errorlog.layout.ConversionPattern=[%5p]\t%d{YYYY-MM-dd HH\:mm\:ss}\t{%F\:%L}[%t]\t%m%n


三、日志格式设置

%p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
%r:输出自应用程序启动到输出该log信息耗费的毫秒数。
%t:输出产生该日志事件的线程名。
%l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。
%c:输出日志信息所属的类目,通常就是所在类的全名。
%M:输出产生日志信息的方法名。
%F:输出日志消息产生时所在的文件名称。
%L::输出代码中的行号。
%m::输出代码中指定的具体日志信息。
%n:输出一个回车换行符,Windows平台为"rn",Unix平台为"n"。
%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%:输出一个"%"字符。

另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:
1) c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。
2)%-20c:"-"号表示左对齐。
3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。



四、日志级别
每个Logger都被了一个日志级别(log level),用来控制日志信息的输出。日志级别从高到低分为:
off 关闭所有日志记录
fatal 致命错误,通常会导致程序崩溃(最高级别)
error 错误日志,记录程序运行过程中的错误信息
warn 报警日志,表明出现了潜在异常信息
info info日志通常记录程序过程中需要跟踪或者采集数据的日志
debug记录debug信息(最低级别)
all输出所有日志记录



页: [1]
查看完整版本: Java的日志模块log4j