zoukankan      html  css  js  c++  java
  • log4j日志文件 log4j.xml log4j.properties配置

    1,导入log4j  jar包;

    2,配置log4j.xml或log4j.properties文件;

    -----------------------------------------------------------------------------------------------------------

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">


    <!--输出方式:输出到控制台-->
    <appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
    <!--
    设置通道名称和输出方式,其中输出方式appender有5种,分别为
    org.apache.log4j.RollingFileAppender
    org.apache.log4j.ConsoleAppender (控制台)
    org.apache.log4j.FileAppender (文件)
    org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
    org.apache.log4j.WriterAppender (将日志信息以流格式发送到指定地方)
    -->
    <param name="Target" value="System.out"/>
    <param name="Threshold" value="INFO"/>
    <!--
    Threshold是个全局的过滤器,他将把低于所设置的level的信息过滤不显示出来
    -->

    <!-- 设置日志输出的格式-->
    <layout class="org.apache.log4j.PatternLayout">

    <!--
    参数都以%开始后面不同的参数代表不同的格式化信息:
    %c 输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的范围
    如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName

    %d 输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}

    %l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数

    %n 换行符

    %m 输出代码指定信息,如info(“message”),输出message

    %p 输出优先级,即 FATAL ,ERROR 等

    %r 输出从启动到显示该log信息所耗费的毫秒数

    %t 输出产生该日志事件的线程名-->

    <!-- The default pattern: Date Priority [Category] Message -->
    <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
    </layout>
    </appender>

    <!--输出方式是:每天一个日志文件-->
    <!--设置通道名称是:file,输出方式DailyRollingFileAppender-->
    <appender name="myFile" class="org.apache.log4j.DailyRollingFileAppender">

    <!--日志文件路径和文件名称 -->
    <!-- 加../在logs,加/在C盘,不加在bin目录 -->
    <!--
    如果在加载时设置了变量System.setProperty("WebApp", appRoot),
    可在此取出来${WebApp} -->
    <param name="File" value="F:/xxy/mylog.log"/>

    <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
    <param name="Append" value="true"/>

    <!-- Rollover at midnight each day -->
    <!-- e.g. mylog.log.2009-11-25.log -->
    <param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/>

    <!-- Rollover at the top of each hour
    <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'"/>
    -->

    <layout class="org.apache.log4j.PatternLayout">

    <!--
    The default pattern: Date Priority [Category] Message
    -->
    <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>

    <!--
    The full pattern: Date MS Priority [Category] (Thread:NDC) Message -->
    <!--
    <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
    -->
    </layout>
    </appender>

    <appender name="ERROR_LOG" class="org.apache.log4j.DailyRollingFileAppender">
    <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
    <param name="File" value="error.log"/>
    <param name="Append" value="true"/>
    <!-- 指定日志输出级别 -->
    <param name="Threshold" value="INFO"/>
    <param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/>
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
    </layout>
    </appender>

    <!--
    level:是日记记录的优先级,优先级由高到低分为
    OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。
    Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这四个级别。
    -->

    <!-- 指定logger的设置,additivity指示是否叠加输出log,如果是false,
    在DsErrorLog logger中日志不会被其它logger满足条件的logger(比如root)
    输出
    -->
    <!-- 将名称为DSErrorLog的logger,输出到“EEROR_LOG”的appender
    所谓logger的名字也就是,在定义Logger时,构造函数的参数
    Logger log = Logger.getLogger("DSErrorLog");
    -->
    <logger name="DSErrorLog" additivity="false">
    <level class="org.apache.log4j.Level" value="DEBUG"/>
    <appender-ref ref="ERROR_LOG"/>
    </logger>

    <!--
    输出指定类包中的日志,比如想输出
    Hibernate运行中生成的SQL语句,可作如下设置
    -->
    <category name="org.hibernate.SQL">
    <priority value="DEBUG"/>
    <!--
    如果指定一个appender,这些log将被输出到指定的appender
    如:<appender-ref ref="myFile"/>
    否则将作用于所有的appender
    -->
    </category>

    <!--
    根默认会自动构建一个 root,输出INFO级别的日志到控制台,供logger继承
    -->
    <root>
    <priority value ="INFO"/>
    <appender-ref ref="myConsole"/>
    <appender-ref ref="myFile"/>
    </root>
    </log4j:configuration>

    ----------------------------------------------------------------------------------------------------------

    3,测试代码;

    public class LoggerTest {

    static Logger log4j = Logger.getLogger(LoggerTest.class.getName());


    public static void main(String args[]){

    PropertyConfigurator.configure("rec/log4j.xml");

    log4j.info("log4j.info");
    log4j.warn("log4j.warning");
    log4j.error("log4j.error");
    log4j.debug("log4j.fatal");
    }
    }

    -----------------------------------------------------------------------------------------------------------

    4,在web项目中使用;

    利用web项目启动的时候去加载log4j.xml配置文件

    在web.xml文件中

    <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>log4j.xml</param-value>
    </context-param>

    <!-- 加载log4j配置文件 -->
    <listener>
    <listener-class>onlyfun.logger.Log4jConfigListener</listener-class>
    </listener>

    public class Log4jConfigListener implements ServletContextListener{
    public static final String CONFIG_LOCATION_PARAM = "log4jConfigLocation";
    public static final String XML_FILE_EXTENSION = ".xml";

    public void contextDestroyed(ServletContextEvent event) {
    LogManager.shutdown();
    }

    public void contextInitialized(ServletContextEvent event) {

    String location = event.getServletContext().getInitParameter(CONFIG_LOCATION_PARAM);
    if (location != null) {
    if (!location.startsWith("/")) {
    location = "/" + location;
    }
    location = event.getServletContext().getRealPath(location);

    //如果是xml结尾就用DOM解析,否则就用properties解析
    if (location.toLowerCase().endsWith(XML_FILE_EXTENSION)) {
    DOMConfigurator.configure(location);
    }else {
    PropertyConfigurator.configure(location);
    }
    }
    }
    }

    加载完毕...........................................................................................................................................

    最后,可写个公共方法便于应用

    public class Log4jUtil {

    public static Logger getInfoLogger(){
    return Logger.getLogger("INFO2222");
    }

    public static Logger getErrorLogger(){
    return Logger.getLogger("ERROR_LOG");
    }

    }

    在别的类中可用以下得到:

    Log4jUtil.getInfoLogger().info("--------massage---------");

    到此为止,主要为自己做备忘,同时方便有需要的人。呵呵!

  • 相关阅读:
    Java Web 网络留言板2 JDBC数据源 (连接池技术)
    Java Web 网络留言板3 CommonsDbUtils
    Java Web ConnectionPool (连接池技术)
    Java Web 网络留言板
    Java Web JDBC数据源
    Java Web CommonsUtils (数据库连接方法)
    Servlet 起源
    Hibernate EntityManager
    Hibernate Annotation (Hibernate 注解)
    wpf控件设计时支持(1)
  • 原文地址:https://www.cnblogs.com/xiexy/p/3976389.html
Copyright © 2011-2022 走看看