Evernote Export body, td { font-family: 微软雅黑 Light; font-size: 14pt; }
Log4j 常用参数
笔记·Log4J快速入门
创建时间: | 04/07/2015 Saturday 18:29 |
更新时间: | 04/07/2015 Saturday 19:48 |
作者: | liker.xu |
- 日志原理 (输出控制)
if(debug)
sout("this is a debug message.")
- JDK 1.4+ Logging
- ALL,FINEST,FINER,FINE,CONFIG,INFO,WARNING,SEVERE,OFF
- Log4j (log4j-.jar) [Apache] 1996
- ALL,TRACE,DEBUG,INFO,WARNING,ERROR,FITAL,OFF
- 级别高的level会屏蔽级别低的信息
-
- public static Logger logger = Logger.getLogger(helloworld.class)
-
- log.trace("…..")
- log.debug("…..")
- 配置文件log4j.properties[classpath] (控制输出级别,输出到哪儿,输出附加什么信息,输出格式等)
-
- log4j.logger.com.helloworld.logging.Logtest = DEBUG,MYLOG
-
- Log4j.properties 文件配置
-
- PropertyConfigurator.configure("etc/Log4j.properties")
- classpath loading by default
- log4j.xml
- 内置大量优化缓存
-
- 初始化时打开文件,保持写操作
- 日志代码字符串连接 isXXXEnabled()?
- commons-logging [Apache commons类库]
-
- 灵活选择日志方式(log4j优先被选择)统一两者的API
- public static Log log = LogFactory.getLog(HelloWorld.class)
- 3个重要概念
-
- 日志记录器Logger
-
- Logger log = Logger.getLogger(HelloWorld.class)
- 单例模式
- 取类名作为自己的名称
- 根记录器rootLogger,存在继承制度
-
- log4.rootLogger=ERROR,A1
- Category概念:通过设置类别来设置类别下所有的logger
-
- log4j.category.com = DEBUG
- 输出地 org.apache.log4j.Appender接口
-
- 常用的输出地:控制台(log4j.ConsoleAppender),文件,数据库,远程服务器etc
- Logger 支持多个Appender
- log4j.appender.配置
-
- 输出到控制台:log4j.appender = org.apache.log4j.ConsoleAppender
-
- Threshold设置启用级别
- 需要配置layout属性
- target 输出到 system.out 或 system.err
- 输出到文件: org.apache.log4j.FileAppender
-
- 支持相对路径与绝对路径
- 指定文件名称: log4j.appender.f.File =
- 追加文件设置:log4j.appender.f.Appender = true (false 为清空,默认为true)
- 输出到按大小滚动文件: org.apache.log4j.RollingFileAppender
-
- 把日志文件输出到指定位置,文件达到指定大小,会自动更名
-
- 指定输出文件位置
- 滚动文件名
- 追加方式
- MaxFileSize = 10KB 文件达到10kb就自动改名
- MaxBackupIndex = 100 ,最多备份100个文件
- rolling.log -> rolling.log.1 -> rolling.log.2 -> … -> rolling.log.100
- 输出到按日期滚动文件:org.apache.log4j.DailyRollingFileAppender
-
- 设置滚动日期格式:.DatePattern = .yyyy-MM-dd
- daily_rolling.log.2008-08-08
- 输出到JDBC数据库:org.apache.log4j.JDBCAppender
-
- 配置驱动,连接字符串,用户名,密码,以及SQL语句
- 需要数据库驱动,需要先创建数据库,并建立数据库日志表?能否自动建立
- log4j.appender.DATABASE.sql = INSERT INTO tb_log (date,priority,message,classname) VALUES (‘%d’,’%p’,’%m’,’%c’)
- 短时间大量连接数据库可能会导致连接失败,谨慎使用JDBC输出
- 输出到SOCKET套接字:SocketAppender
-
- 使用SocketServer自己编写程序,在某个特定的端口监听
- 输出到SMTP邮件(SMTPAppender)[log4j-1.2.15以上版本支持]
-
- 配置邮件服务器地址,用户名,密码,发件人邮箱,收件人邮箱etc
- 短时间大量发出ip会被邮件服务器封掉ip,谨慎使用SMTPAppender
- 自定义输出:实现Appender接口,继承AppenderSkeleton类
- Log4j 能够自动取得各种环境数据
-
- 时间,级别,类名,文件名,方法名,所在行数etc
- 日志格式化处理器Layout
-
- log.error()的参数只包含日志信息
- 负责格式化日志信息,利用Layout可以附加其他信息
-
- org.apache.log4j.PatternLayout
-
- 自定义输出信息(日期,时间,所在的线程,类名,文件名,信息级别,文件行数等)
- layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS}[%C]-[%p] %m%n
- 设置输出内容的长度,不够长用空格补齐,使内容变得整齐
-
- %10.20p %-10p
- 正整数表示右对齐,负整数表示左对齐,数字表示最小宽度,小数点表示最大宽度,超出则截取
- org.apache.log4j.HTMLLayout
- org.apache.log4j.XMLLayout
-
- 比较好解析(利用DOM技术与SAX技术)
- 无法直接被解析,需要额外XML文件来加载
- MORE SETTINGS:
-
- 设置编码方式
- 设置是否缓存
Log4j 常用参数
- %c logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间。
- %C 调用logger的类的全名(包含包路径)。
- %d 日志记录时间,{<日期格式>}使用ISO8601定义的日期格式。
- %F 调用logger的源文件名。
- %l 日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
- %L 调用logger的代码行%m 输出消息。
- %M 调用logger的方法名。
- %n 当前平台下的换行符。
- %p 该条日志的优先级。
- %r 从程序启动时到记录该条日志时已经经过的毫秒数。
- %t 产生该日志事件的线程名。
- %x 按NDC(Nested Diagnostic Context,线程堆栈)顺序输出日志。
- %X 按MDC(Mapped Diagnostic Context,线程映射表)输出日志。通常用于多个客户端连接同一台服务器,方便服务器区分是那个客户端访问留下来的日志。
- %% 显示一个百分号。)
- 记录日志时,可以使用Apache的commons-logging日志,该log只是个接口,如果有Log4j,则使用Log4j记录日志,否则会使用JDK的log。Log4J配置文件为Log4j.properties ,需要配置根日志rootLogger,输出地Appender,格式化处理器Layout。rootLogger是所有Log的父辈,除非重新覆盖,否则所有的log都将继承rootLogger配置。
- 更多Java开源日志工具:http://www.open-open.com/29.htm