130 likes | 372 Views
Log4j 初步学习. 张番栋 00848180. Log4j 初步学习. Log4j 简介 Log4j 的相关类简介 Log4j 配置的实时更新 Log4j 日志过滤器(未完成). Log4j 简介. 在代码中输出程序上下文信息是一种排错的低技能办法,这也是最普遍适用的办法,因为排错工具并不总是可以被使用或者适用于你的程序。对于多线程的应用程序和多数发行的应用程序,通常就是这样的情形。 怎么做呢?用 System.out.println() 不方便管理。 Log4j 就是这样的日志管理工具。
E N D
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