日志实现Log4j配置解读

日志学习心得

最近工作中遇到控制台输出日志很难看,就不得以从头开始学习日志相关内容,总结下学习成果;

  • 首先是log.porperties文件相关说明
  • 其次是单个文件log说明
  • 最后是个人一些想法
一、log4j.porperties配置说明
(1)、首先是logger(记录)

就功能性来书System.out.println()与logger一样,都是自定义输出信息便于工程师排查问题。tomcat输出红色日志是由于它定义的日志级别导致的,err输出信息颜色就是红色。
logger部分主要是获取要记录日志的类,比如:
private static Logger logger = Logger.getLogger(Test.class);
getLogger(),该方法会将Test.class的className作为Log的一个name属性,相当于这是这是name = Test 的log对象。有对象之后就可以利用对象进行输出想要输出的内容,一般可以在Interceptor拦截器中使用log然后拦截请求,获取方法名、参数等,输出到控制台进行实时定位,或者输出到自定义位置。

(2)、其次是appender(输出)

输出内容就是指像那个位置输出,控制台、文件、远程地址以便排查,可以在单个文件配置亦可以在配置文件中配置
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

(3)、最后是layout(布局)

layout输出的布局方式,然后可以根据特定语法进行formart,输出自己喜欢的方式
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)

配置详解
(一)、配置根Logger:

log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
log4j.additivity.org.apache=false:表示Logger不会在父Logger的appender里输出,默认为true。

  1. level :设定日志记录的最低级别,可设的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别,Log4j建议只使用中间四个级别。通过在这里设定级别,您可以控制应用程序中相应级别的日志信息的开关,比如在这里设定了INFO级别,则应用程序中所有DEBUG级别的日志信息将不会被打印出来。
  2. appenderName:就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开。
    例如:log4j.rootLogger=INFO,A1,B2,C3
(二)、配置日志信息输出目的地(appender):

log4j.appender.appenderName = className
appenderName:自定义appderName,在log4j.rootLogger设置中使用;
className:可设值如下:

(1)org.apache.log4j.ConsoleAppender(控制台)
(2)org.apache.log4j.FileAppender(文件)
(3)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
(4)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
(5)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

(三)配置日志信息的输出格式(Layout)

log4j.appender.appenderName.layout=className
className:可设值如下:

(1)org.apache.log4j.HTMLLayout(以HTML表格形式布局)
(2)org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
(3)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
(4)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

格式化内容注释:
ConversionPattern=%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平台为"\r\n",Unix平台为"\n"。
%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%:输出一个"%"字符。
另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:

1)c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。

2)%-20c:"-"号表示左对齐。
3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。

思考:

对于系统级应用system.out.print();输出来时有点捉襟见肘,需要要给系统级别的框架来实现日志输出,最开始的日志都是system.out.print()。后来有人设计出了log4j,再后来又陆续出现相关log框架,并且为了适配不同日志实现归纳出一个门面接口,用来适配不同实现。目前都是用SLF4J(Simple logging facade for Java)作为适配,sl4j作为一种实现。如果不配置log4j.properties则控制台不会输出内容(排除web服务器部分),配置后会根据配置的org.apache.log4j.ConsoleAppender,该类作为输出到控制台的日志格式,可以自定义该类进行替代(但是问题比较多,首先要spring框架认可该类,相当于拆解框架部分然后加入自定义部分)个人理解,但这样以来就相当于重新定义了所有日志的输出。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值