日志分两种: 1. 系统日志:处理应用程序内部操作而不是基于用户的特定操作。例如:SMTP主机没有响应。 2. 应用程序日志:特定用户操作中的记录。 日志作用 记录异常; 安全检查 非法用户跟踪 测试 日志种类 1. 容器日志文件。日志文件的名称和位置依赖与文件。可在类中直接从获取日志记录器。如: javax.servlet.ServletContext context = getServlet().getServletContext(); context.log("日志"); 2. 使用common-logging。具体不介绍。 3. 使用common-logging和log4j的结合。下面详细介绍如何使用log4j 使用log4j进行记录 配置步骤: 1. 下载log4j的 jar 文件 2. 将jar文件复制到应用程序的WEB-INF/lib目录里 3. 配置log4j.properties。举例如下: log4j.rootLogger=WARN,Console,File log4j.logger.cn.rolia.top.LoggingListener=INFO,Console,File log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d %-5p %c - %m%n log4j.appender.File=org.apache.log4j.FileAppender log4j.appender.File.file=struts-log.log log4j.appender.File.layout=org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern=%d [%t] %-5p %c - %m%n 4. 配置common-loggging.properties。举例如下:org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory 5. 在方法中使用日志功能,相关代码如下: Log log = LogFactory.getLog(LoggingListener.class); log.info("..."); 讨论 当你的应用程序出错时首先会查看日志文件。struts使用Jakarta Commons Logging API来记录日志信息。大多数用户会选择使用log4j。 大多数log4j类封状在common-logging里 配置记录器 你可以为没个类配置一个日志记录器。如: log4j.logger.org.apache.struts.action.RequestProcessor=DEBUG,Console 你也可以为package配置统一的日志记录器如: log4j.logger.org.apache.struts=DEBUG,Console,File 还可以使用一个默认的日志记录器: log4j.rootLogger=WARN,Console 如果log4j.logger没有配置就使用这个默认的日志记录器。 格式 有如下格式可供使用: org.apache.log4j.HTMLLayout(以HTML表格的形式布局) org.apache.log4j.PatternLayout(可以灵活地指定布局模式) org.apache.log4j.SimpleLayout(包含日志信息的级别和字符串) org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息) 如果使用了PatternLayout,则可以为日志指定格式。如: log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c - %m%n These format specifiers result in the display of the date (%d), thread (%t), priority (%-5p), class name (%c), log message (%m), and a carriage return (%n). For a complete list of all supported format specifiers, see the documentation for the Log4J PatternLayout class. 更多格式参见API 输出目的地 输出目的地主要有以下几种: org.apache.log4j.ConsoleAppender(控制台) org.apache.log4j.FileAppender(文件) ogr.agapche.log4j.DailyRollingFileAppender(每天产生一个日志文件) ogr.agapche.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) ogr.agapche.log4j.WriterAppender(将日志信息以流的格式发送到任意指定的地方) 使用方法举例如下: log4j.logger.org.apache.struts=DEBUG,Console,File log4j.appender.File=org.apache.log4j.FileAppender log4j.appender.File.file=struts-log.log log4j.appender.File.layout=org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern=%d [%t] %-5p %c - %m%n 日志级别 有如下6个级别: 1. Trace 2. Debug 3. Info 4, Warn 5. Error 6. Fatal 一个例子 1. 先创建一个应用程序监听器类如下: LoggingListener.java package cn.rolia.top; import javax.servlet.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class LoggingListener implements ServletContextListener{ Log log = LogFactory.getLog(LoggingListener.class); public void contextDestroyed(ServletContextEvent arg0) { try{ log.info("Application destroyed"); }catch(Exception e){ System.out.println("错误:"); System.out.println(e.getMessage()); } } public void contextInitialized(ServletContextEvent arg0) { try{ log.info("Application initialed"); }catch(Exception e){ System.out.println("错误:"); System.out.println(e.getMessage()); } } } 在web.xml中配置如下: <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <listener> <listener-class>cn.rolia.top.LoggingListener</listener-class> </listener> ... </web-app> 2. 配置log4j.properties如下: log4j.rootLogger=WARN,Console,File log4j.logger.cn.rolia.top.LoggingListener=INFO,Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d %-5p %c - %m%n 将其保存在WEB-INF/classes目录下 3. 配置commons-logging.properties: org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory 将其保存在WEB-INF/classes目录下。 完毕 启动服务器时将加载应用程序。控制台显示:如下: 2007-01-30 06:23:42,703 INFO cn.rolia.top.LoggingListener - Application initialed log4j性能影响 使用log4j创建一个日志信息的时间开销依赖于几个因素: 1. 使用附件器的类型 2. 用于格式化信息的log4j布局 3. 创建日志信息所需的参数构造时间 4. 记录器层次架构的深度以及从何处指派日志入口点 对logging最重要的影响可能是用户试图以什么格式记录信息。SimpleLayout是快的。patternLayout为他的灵活性付出了很大代价。Log4j文档在javadoc中包含了几个PatternLayout的警告信息,指出哪些会影响系统性能。 通常在开发阶段。logging开销不是很重要。用户不必过多的考虑系统开销的问题。

评论