玩转日志Logger

   明了的日志记录对于一个完美的系统来说是必不可少的。尤其项目在生产环境中遇到问题,开发人员可以通过日志记录逐一排查哪里出了故障。
  Logger框架有很多种:Apache下的logger,util包下的logger,commons包下的logger,还有slf4j的logger,大家一定会问我,选择哪种框架呢? 说句题外话,要是我,我绝对不会考虑commons旗下的和util旗下的,为什么呢 ,日志功能如果这么低端的常用的包就有日志功能,肯定有考虑不周到的地方,再说也不够大气上档次,我的强烈推荐是slf4j。
  
知道我为什么会选择slf4j么?有如下几个原因:
1:效率上,功能上都是其他框架下的日志所比拟的。
2:slf4j是专一做日志功能的框架,知名度比其他框架好


实现日志的功能,我们离不开日志的配置文件,我一般不会选择xml格式配置文件,而会选择property格式的配置文件,我会把它当做属性的键值对来看待,更直观。

log4j.properties大体配置文件如下:
### 设置日志级别,低于WARN级别的日志不会输出到日志文件###           
log4j.rootLogger=WARN,A1,A2

### 开发工具的控制台console打印出日志 ###
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Target=System.out
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-5p(%10c{1}) %m%n

### 每天创建一个日志文件,而且会以年月日的开头命名 ###
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.File=logs/mall.log
log4j.appender.A2.DatePattern='.'yyyy-MM-dd
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

### 错误级别下的日志文件 ###
log4j.appender.Error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Error.DatePattern='.'yyyy-MM-dd
log4j.appender.Error.File=logs/mall_error.log
log4j.appender.Error.layout=org.apache.log4j.PatternLayout
log4j.appender.Error.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} %-5p(%10c{1}) %m%n

### 为项目中某种包开头的类中有输出语句的地方输出到日志文件下A1,级别是debug ###
log4j.logger.com.linkage=DEBUG,A1
log4j.logger.com.ai=DEBUG,A1


格式化符号说明:
%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平台为"\r\n",Unix平台为"\n"。
%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%:输出一个"%"字符。
另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:
1) c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。
2)%-20c:"-"号表示左对齐。
3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。



在代码的哪些地方写入正确格式的log信息呢?
1,在可能出现异常的地方写入erro级别的日志,因为这为后面的排错至关重要
2,在一些逻辑处理的地方写入info级别的日志,比如查看用户登录信息等
3,在开发的条件下写入debug信息,方便开发人员测试

猜你喜欢

转载自jianhao-wang.iteye.com/blog/2205563