Log4j初步学习

Download Report

Transcript Log4j初步学习

Log4j初步学习
张番栋 00848180
Log4j初步学习
• Log4j简介
• Log4j的相关类简介
• Log4j配置的实时更新
• Log4j日志过滤器(未完成)
Log4j简介
• 在代码中输出程序上下文信息是一种排错的低技能办法,这也是最普
遍适用的办法,因为排错工具并不总是可以被使用或者适用于你的程
序。对于多线程的应用程序和多数发行的应用程序,通常就是这样的
情形。
• 怎么做呢?用System.out.println()不方便管理。Log4j就是这样的日志
管理工具。
• 它具有多种优点。首先,它能精确地提供运行时的上下文(context)。
一旦在程序中加入了Log 代码,它就能自动的生成并输出logging信息
而不需要人为的干预。然后,它能够关闭一些调试信息输出而不影响
其他人的调试。另外,log信息的输出可以被保存到一个固定的地方,
以备以后研究。除了在开发过程中发挥它的作用外,一个性能丰富的
日志记录软件包能当作一个审计工具(audit tool)使用。(log4j手册)
Log4j相关类简介
• Logger
•
输出日志信息
•
实例化:Logger logger = Logger.getRootLogger(name);
•
name是你想要的名字,一般使用logger所在类的名字
•
不同的logger之间以名字为键、以’.’为分隔形成父子关系(功能上类似于继
承关系,例如在子logger没有设置的情况下,它会承用父亲的优先级等性
质),其中root可以通过Logger.getRootLogger()得到,它是所有logger的祖
先(这一点很关键,是我后面实时更新实现的关键点),例如:
•
Logger log1,log2,log3;
•
log1 = Logger.getRootLogger(“java.awt”);
•
log2 = Logger.getRootLogger(“java.awt.event”);
•
log3 = Logger.getRootLogger(“javax.swing”);
•
则log1和log3是root的直接子节点,log2是log1的直接子节点
Log4j相关类简介
• Level
• 日志优先级,设置后logger只能输出高于该优先级的日志
• 常用优先级从低到高:debug、info、warn、error、fatal
• 实例化方法:Level.DEBUG/Level.ERROR等;
• logger.setLevel(Level.INFO);
• logger.debug(“debug”);//不会输出
• logger.info(“info”);//会输出
• logger.error(“error”);//会输出
Log4j相关类简介
• Appender
• 控制日志输出的目的地
•
org.apache.log4j.ConsoleAppender
控制台输出
•
org.apache.log4j.FileAppender
文件
•
org.apache.log4j.DailyRollingFileAppender
每天产生一个日志文件
•
org.apache.log4j.RollingFileAppender
时候产生一个新的文件
文件大小到达指定尺寸的
•
org.apache.log4j.WriterAppender
到任意指定的地方
其它……
具体使用可以参见log4j手册
将日志信息以流格式发送
•
•
Log4j相关接口简介
• LoggerRepository
• logger的仓库
• 一般来说,logger以名字为层次存放在repository
中,我们可以通过它查询已经创建的logger
Log4j相关类简介
• org.apache.log4j.config.PropertySetter
• 以对象的属性或属性集为参数,更新一个对象
• 这是一个非常非常有用的类,尤其对于我后面的实时更新。当我们要
设置一个对象的属性,但在编程时不知道这个对象的类型的时候,用
这个类得方法十分方便。
• 比如我们想要利用属性集p(Properties类型)设置logger里以
appenderName为名字的appender,就可以:
• Appender appender = logger.getAppender(appendername);
• PropertySetter.setProperties(appender, p);
• 其他的方法及其使用可以参见log4j的api
Log4j相关类简介
• org.apache.log4j.spi.Filter
• 过滤器
Log4j使用步骤
• 1、设置配置(一般通过配置文件控制,但
加载配置文件的时候会重启日志服务)
• 2、获得logger
• 3、日志输出
Log4j配置的实时更新
• 需求:在不重启日志服务的情况下,实时
更新日志的配置
• 步骤:
• 1、更新rootLogger的相关属性
• 2、更新配置文件
更新rootLogger的相关属性
• 1、通过名字获得appender
• 2、更新appender的layout(通过
PropertySetter.setProperties,下同)
• 3、更新appender的filter
• 4、更新appender的errorHandler
• 5、更新appender的appender-ref
• 6、更新appender
Log4j日志过滤器(未完成)