正文

日志 log4j2007-03-12 22:55:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hurongliang/23889.html

分享到:

日志分两种:

1.  系统日志:处理应用程序内部操作而不是基于用户的特定操作。例如:SMTP主机没有响应。

2.  应用程序日志:特定用户操作中的记录。

 

日志作用

记录异常;

安全检查

非法用户跟踪

测试

日志种类

1.  容器日志文件。日志文件的名称和位置依赖与文件。可在类中直接从获取日志记录器。如:

       javax.servlet.ServletContext context = getServlet().getServletContext();

       context.log("日志");

2. 使用common-logging。具体不介绍。

3. 使用common-logginglog4j的结合。下面详细介绍如何使用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开销不是很重要。用户不必过多的考虑系统开销的问题。

阅读(2826) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册