客户端

Java的日志模块log4j

所在版块: 后端技术 2017-09-30 10:32 [复制链接] 查看: 2959|回复: 0
日志,编程中最基础也最容易被忽视的模块。据说看一个程序员编程水平的高低,看程序日志就行了。

一、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的一个开源项目。使用方法如下:
  1. Logger logger = Logger.getLogger(Main.class);
  2. logger.debug("debug_log");    //!< 记录debug信息(最低级别)
  3. logger.info("info_log");           //!< info日志通常记录程序过程中需要跟踪或者采集数据的日志
  4. logger.warn("warn_log");        //!< 报警日志,表明出现了潜在异常信息
  5. logger.error("error_log");        //!< 错误日志,记录程序运行过程中的错误信息
  6. logger.fatal("fatal log");          //!< 致命错误,通常会导致程序崩溃(最高级别)
复制代码

代码调用非常简单,需要了解的是log4j的配置。默认log4j模块会加载classpath下的log4j.properties文件。一般工程中也就写在这个配置文件。重点是里面的配置。
log4j.rootLogger=info,console,infolog,errorlog

# console log
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=all     #控制台输出所有日志
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%5p]\t%d{YYYY-MM-dd HH\:mm\:ss}\t{%F\:%L}[%t]\t%m%n

# info log file
log4j.appender.infolog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.infolog.File=log/main.log
log4j.appender.infolog.Threshold=info    #只输出info及info以上级别的日志
log4j.appender.infolog.Append=true
log4j.appender.infolog.Encoding=UTF-8
log4j.appender.infolog.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.infolog.layout=org.apache.log4j.PatternLayout
log4j.appender.infolog.layout.ConversionPattern=[%5p]\t%d{YYYY-MM-dd HH\:mm\:ss}\t{%F\:%L}[%t]\t%m%n

# error log file
log4j.appender.errorlog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorlog.File=log/error.log
log4j.appender.errorlog.Threshold=error    # 只输出error和fatal级别日志
log4j.appender.errorlog.Append=true
log4j.appender.errorlog.Encoding=UTF-8
log4j.appender.errorlog.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.errorlog.layout=org.apache.log4j.PatternLayout
log4j.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输出所有日志记录



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码关注微信公众号

QQ|Archiver|手机版|小黑屋|mwt-design ( 沪ICP备12041170号-1

GMT+8, 2024-5-21 15:53 , Processed in 0.065689 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回列表