• jQueryrocket


    之前,对于log4j使用过但并没有过多了解,朋友问我如何让日志按照日期去生成,琢磨了一下记录下来。

    log4j.jar 包,可以直接在官方下载到:http://logging.apache.org/log4j/1.2/download.html

    log4j-extr包,主要是立即生成自定义的文件名(原始的log4j生成的文件后缀名只能在第二天名称才会变)
    URL http://www.apache.org/dyn/closer.cgi/logging/log4j/companions/extras/1.1/apache-log4j-extras-1.1.zip

    简单说明:

    Log4j配置中有5个重要的概念:日志记录器(Logger)、根记录器(rootLogger)、类别(category)、输出地(Appender)以及日志格式化器(Layout)。其中,Logger负责记录日志;rootLogger是所有记录器的父亲,任何记录器都可继承rooLogger的配置;category可以设置类别下所有的Logger,类似于java中的包,效果与Logger名字等价;Appender负责输出到什么地方;Layout负责以什么格式输出、输出哪些附加信息(比如:时间、类名、方法名、所在行数等)。在log4j.properties配置中,log4j.logger后面配置的是Logger,log4j.appender后面配置的是Appender,rootLogger直接用log4j.rootLogger配置。

    再说下说下log4j的几种log级别的等级:
    日志记录器(Logger)的行为是分等级的。如下表所示:
    分 为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别,这些级别是从高到低的级别。Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别, 则应用程序中所有DEBUG级别的日志信息将不被打印出来
    使用方式:
    1、引入jar
    2、web.xml配置路径,如果默认在根目录下,则不需要,请忽略这一步(非必要)
    3、编写log4j.properties或者log4j.xml文件

    # priority  :debug<info<warn<error
    #you cannot specify every priority with different file for log4j 
    log4j.rootLogger=debug,stdout,info,debug,warn,error 
     
    #console
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
    log4j.appender.stdout.layout.ConversionPattern= [%d{yyyy-MM-dd HH:mm:ss a}]:%p %l%m%n
    #info log
    log4j.logger.info=info
    log4j.appender.info=org.apache.log4j.DailyRollingFileAppender 
    log4j.appender.info.DatePattern='_'yyyy-MM-dd'.log'
    log4j.appender.info.File=${catalina.base}/logs/info.log
    log4j.appender.info.Append=true
    log4j.appender.info.Threshold=INFO
    log4j.appender.info.layout=org.apache.log4j.PatternLayout 
    log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
    #debug log
    log4j.logger.debug=debug
    log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender 
    log4j.appender.debug.DatePattern='_'yyyy-MM-dd'.log'
    log4j.appender.debug.File=${catalina.base}/logs/debug.log
    log4j.appender.debug.Append=true
    log4j.appender.debug.Threshold=DEBUG
    log4j.appender.debug.layout=org.apache.log4j.PatternLayout 
    log4j.appender.debug.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
    #warn log
    log4j.logger.warn=warn
    log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender 
    log4j.appender.warn.DatePattern='_'yyyy-MM-dd'.log'
    log4j.appender.warn.File=${catalina.base}/logs/warn.log
    log4j.appender.warn.Append=true
    log4j.appender.warn.Threshold=WARN
    log4j.appender.warn.layout=org.apache.log4j.PatternLayout 
    log4j.appender.warn.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
    #error
    log4j.logger.error=error
    log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.error.DatePattern='_'yyyy-MM-dd'.log'
    log4j.appender.error.File = ${catalina.base}/logs/error.log 
    log4j.appender.error.Append = true
    log4j.appender.error.Threshold = ERROR 
    log4j.appender.error.layout = org.apache.log4j.PatternLayout
    log4j.appender.error.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n

    发现问题:要第二天才会出现带有日期的格式,当天的文件不带有日期格式(测试手动修改机子时间)

    另外,不足:log4j.properties较log4j.xml是有缺陷的,就是里面的日志等级可能都会输出到一个文件中,高级别的日志信息也会在低级别的日志文件中出现,有点混乱。

    踩雷到此其实就结束了。

    补充:log4j在web.xml中的配置

    way1:

    <!-- webAppRootKey:值缺省为webapp.root,当tomcat下部署多个应用时(每个都用到了log4j),
    每个应用的web.xml中都要配置该参数,该参数与Log4j.xml文件中的${webapp.root}
    否则每个应用的webAppRootKey值都相同,就会引起冲突
    -->
    <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>webapp.root</param-value>
    </context-param>
    
    <!-- log4jConfigLocation:log4j配置文件存放路径 -->
    <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/conf/log4j.xml</param-value>
    </context-param>
    <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

    way2:

    public void init() {
    String prefix = getServletContext().getRealPath("/");
    String file = getInitParameter("log4jConfigLocation");
    if (file != null) {
    PropertyConfigurator.configure(prefix + file); 
    }
    }

    ====================================================================

    <servlet>
    <servlet-name>your servlet</servlet-name>
    
    <servlet-class>your servelt class</servlet-class>
    <init-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.properties</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet>
  • 相关阅读:
    MySql学习
    python学习笔记
    关于字符编码的理解
    session与cookie
    常用的表单元素
    Linq基础
    发送邮件。。
    进程与线程
    winform知识点集合
    winform基础与简单的窗体
  • 原文地址:https://www.cnblogs.com/kaspar/p/12737845.html
Copyright © 2020-2023  润新知