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日志过滤器(未完成)