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---------");

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

  • 相关阅读:
    c# 遍历DataTable
    c# 判断网络状态
    c# 发送Http 请求
    c# 处理Json字符串
    环境搭建(Nginx + PHP7 + Mysql + 运行ThinkPHP5项目)
    c# 获取时间戳
    php 处理 byte
    微信小程序 滚动至元素底部
    mysql 删除 多个字段相同的 重复的 数据
    微信小程序 跑马灯效果
  • 原文地址:https://www.cnblogs.com/xiexy/p/3976389.html
Copyright © 2011-2022 走看看