日志分两种:
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开销不是很重要。用户不必过多的考虑系统开销的问题。
评论