博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
log4j-Note
阅读量:6442 次
发布时间:2019-06-23

本文共 8355 字,大约阅读时间需要 27 分钟。

hot3.png

Log4j应该是使用非常广泛的日志组件。虽然使用广泛,但是个人认为在一些项中也仅仅当成了System.out输出来用,官网:。 1.x在2015.8月后就不再支持,建议升级到2.x版本。 #简单使用 classpath(WEB-INF下、src源文件下或maven工程的src/main/resource源文件夹下)下新建log4j.properties文件,内容如下:

# Root logger optionlog4j.rootLogger=DEBUG, stdout# Direct log messages to stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

Java使用代码:

org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass()); //LogManager.getLogger(this.getClass());log.debug("debug message");

打印一条日志:

2016-07-25 22:06:44 DEBUG Log4j1XTest:11 - debut message

###Lever 日志级别 相对JdkLogging而言,log4j的日志级别较精简: TRACE(最低)<DEBUG(开发时使用,便于调试问题)<INFO(线上环境)<WARN(线上环境,稳定)<ERROR(异常记录)<FATAL(最高级) 一般常用的也就是DEBUG到ERROR的这4种。主要的级别使用说明:

ERROR 为严重错误 主要是程序的错误,如异常的记录WARN 为一般警告,比如session丢失,这类一般不会影响程序正常进行INFO 为一般要显示的信息,比如登录登出,生产环境一般设置这个级别及以上DEBUG 为程序的调试信息,开发时使用,日志量比较大,有时为调试减少干扰可以关闭一些包的日志输出

log4j的级别除了配置中指定的级别外,也可以在程序中指定级别,而且这与Logger是一一对应关系。在上面的配置基础上,程序测试设置Lever:

Logger log = Logger.getLogger(this.getClass()+"-wl-");log.setLevel(Level.WARN);Logger logger = Logger.getLogger(this.getClass());logger.setLevel(Level.ERROR);log.debug("debug log");logger.debug("debug logger");log.warn("warn log");logger.warn("warn logger");log.error("error log");logger.error("error logger");

控制台输出:

2016-07-25 22:53:45 WARN  Log4j1XTest-wl-:35 - warn log2016-07-25 22:53:45 ERROR Log4j1XTest-wl-:37 - error log2016-07-25 22:53:45 ERROR Log4j1XTest:38 - error logger

###Appender 输出日志 Appender对应的是输出,即日志向哪里输出,上面的appenderConsoleAppender,从名字上看是Console,看下里面的实现便是根据配置项log4j.appender.stdout.Target=System.out指定的值来决定使用SystemOutStream内部静态类中输出方法中System.out.write(b) 或内部静态类SystemErrStreamSystem.err.write(b)。 Log4j为Appender接口提供了很多实现,下面几种可能项目中使用较多的Appender,写入控制台或文件中。

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

###Layout 格式 Layout是日志的格式,同样的log4j也给我们提供了好几种实现,PatternLayout最为强大,可以根据我们希望日志中展示的列来配置相应ConversionPattern参数,这样使日志的输出更个性和符合实际运用。

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

###ConversionPattern 日志信息格式参数含义:

-X号: X信息输出时左对齐; %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL, %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 , 一般使用%d{yyyy-MM-dd HH:mm:ss:SSS} %r: 输出自应用启动到输出该log信息耗费的毫秒数  %c: 输出日志信息所属的类目,通常就是所在类的全名  %c{1} 便仅是类名 %t: 输出产生该日志事件的线程名 %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10) %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 %%: 输出一个"%"字符 %F: 输出日志消息产生时所在的文件名称 %L: 输出代码中的行号 %m: 输出代码中指定的消息,产生的日志具体信息 %n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如: 1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。 2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。 3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。 4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。

配置如下的日志格式:

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS} %-5p %t %20.20c:%L - %m%n

输出日志格式为:

2016-07-25 23:04:22:101 DEBUG main 4j1.test.Log4j1XTest:18 - debug message2016-07-25 23:04:22:117 DEBUG main 4j1.test.Log4j1XTest:24 - debug2 message

###Appender 配置示例(log4j.properties)

#下面给出的Log4J配置文件实现了输出到控制台,文件,回滚文件,输出到数据库日志表。其中发送日志邮件和Socket未。log4j.rootLogger=DEBUG,CONSOLE,FILE,ROLLING_FILE,D_ROLLING_FILE,DATABASE#DEBUG,CONSOLE,FILE,ROLLING_FILE,D_ROLLING_FILE,MAIL,DATABASE#Only log level WARN or above log4j.threshold=WARN#################### Console Appender###################log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.CONSOLE.Threshold=INFOlog4j.appender.CONSOLE.Target=System.outlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutlog4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS} %-5p %t %20.20c:%L - %m%n#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n###################### File Appender#####################log4j.appender.FILE=org.apache.log4j.FileAppenderlog4j.appender.FILE.File=${catalina.home}/logs/webapp.info.loglog4j.appender.FILE.Append=falselog4j.appender.FILE.Threshold=INFOlog4j.appender.FILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS} %-5p %t %20.20c:%L - %m%n ######################### Rolling File ########################log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppenderlog4j.appender.ROLLING_FILE.Threshold=WARN log4j.appender.ROLLING_FILE.File=d:\\webapp.rolling.warn.loglog4j.appender.ROLLING_FILE.Append=truelog4j.appender.ROLLING_FILE.MaxFileSize=10KBlog4j.appender.ROLLING_FILE.MaxBackupIndex=10log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.ROLLING_FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS} %-5p %t %20.20c:%L - %m%n######################### Daily Rolling File########################log4j.appender.D_ROLLING_FILE=org.apache.log4j.DailyRollingFileAppender#/opt/logs/webapp.dr-yyyy-MM-dd.log  '中包含的不需要处理#yyyy-MM,对应monthly(每月)#yyyy-ww,对应weekly(每周)#yyyy-MM-dd,对应daily(每天)#yyyy-MM-dd-a,对应half-daily(每半天)#yyyy-MM-dd-HH,对应hourly(每小时)#yyyy-MM-dd-HH-mm,对应minutely(每分钟)#log4j.appender.D_ROLLING_FILE.Encoding=utf-8 log4j.appender.D_ROLLING_FILE.DatePattern='-'yyyy-MM-dd#log4j.appender.D_ROLLING_FILE.File=/opt/logs/webapp.loglog4j.appender.D_ROLLING_FILE.File=d:\\webapp.loglog4j.appender.D_ROLLING_FILE.Append=truelog4j.appender.D_ROLLING_FILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.D_ROLLING_FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n######################### JDBC Appender#######################log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppenderlog4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/testlog4j.appender.DATABASE.driver=com.mysql.jdbc.Driverlog4j.appender.DATABASE.user=rootlog4j.appender.DATABASE.password=rootlog4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[W1]%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n')log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayoutlog4j.appender.DATABASE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n##################### Socket Appender  not test####################log4j.appender.SOCKET=org.apache.log4j.RollingFileAppenderlog4j.appender.SOCKET.RemoteHost=localhostlog4j.appender.SOCKET.Port=5001log4j.appender.SOCKET.LocationInfo=true# Set up for Log Facter 5log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayoutlog4j.appender.SOCKET.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n######################### SMTP Appender   not test#######################log4j.appender.MAIL=org.apache.log4j.net.SMTPAppenderlog4j.appender.MAIL.Threshold=FATALlog4j.appender.MAIL.BufferSize=10log4j.appender.MAIL.From=log@cmp.comlog4j.appender.MAIL.SMTPHost=mail.cmp.comlog4j.appender.MAIL.Subject=Log4J Messagelog4j.appender.MAIL.To=logto@cmp.comlog4j.appender.MAIL.layout=org.apache.log4j.PatternLayoutlog4j.appender.MAIL.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n

###Appender 配置示例(log4j.xml) xml配置可以配置appender的日志级别范围

参考文献

2016-08-03 19:42:14 星期三

转载于:https://my.oschina.net/kenzheng/blog/726109

你可能感兴趣的文章
如何用公式编辑器编辑直角三角形符号
查看>>
每日一个Linux命令 地址
查看>>
UI---设置Activity背景为透明
查看>>
晒晒名企大公司的工资收入
查看>>
【DOM编程艺术】显示"文献来源链接表"
查看>>
关于css
查看>>
HTML5 web workers
查看>>
unity3D小小白之刚体(rigidbody)碰撞体(colliders)的简单使用方法
查看>>
为什么需要虚析构函数
查看>>
问题-应用程序加载图标不可用
查看>>
Objective-C 中nil/Nil/NULL/NSNull
查看>>
细聊分布式ID生成方法
查看>>
脸上有酒窝,脖子后有痣,胸前有颗痣,此三种人不能错过
查看>>
用VC++开发Oracle数据库应用程序详解2
查看>>
bzoj1305
查看>>
SpringAOP面向切面编程
查看>>
[USACO12JAN]Video Game Combos
查看>>
Multiset的使用 TOJ 2196.Nuanran's Idol II 与 UVA11136 Hoax or what
查看>>
Linux安装相关
查看>>
WIN7 下 在cmd 命令中 进入某个目录 的方法
查看>>