zoukankan      html  css  js  c++  java
  • Log4j配置说明及样例

      一般的应用都会记录日志,Java圈里面用得最多就属log4j了,比较规范一点就是使用log4j.xml进行配置Log输出。这里就比较有疑问,多数情况是使用log4j.properties文件呐,前面也说了,规范一点就用log4j.xml进行配置,他们之间究竟有哪些区别呢,在百度知道里面有人这么回答,个人觉得还是有点道理的,广大博友可以自由备注。

    • 区别不大,只是在项目中配置的文件形式不一样。功能上没区别。 推荐用xml 方式。

    • 有web 项目中log4.properties不能使用Filter拦截日志级别,而log4j.xml可以,这点感觉log4j.xml要强大些

    • log4j.xml插入数据库的时候sql写在layout属性的ConversionPattern参数中,而log4.properties则有单独的sql属性接受配置文件中的sql语句

      虽然没有人点赞,但是有点道理哦。有这么一个场景:某一个模块中,我想把很重要的业务日志分离出来,保存在单独的一个文件中,不和其他普通的日志打在一起,后续用来做统计也比较方便(我厂大部分应用都是将日志统统地打印在一起,然后通过一个日志收集平台收集到MQ、HDFS中去做统计分析,然后统计分析的时候又要对这些日志做过滤只关心特殊的业务日志,个人认为这样很不好,不仅给后续统计分析带来复杂度,同时也给浪费大量收集平台的网络、IO等资源。)这里给出一个log4j.xml的配置:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
    <log4j:configuration>
        <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="[%d{dd/MM/yy HH:mm:ss:sss}] %t %5p %c{2}: %m%n"/>
            </layout>
        </appender>
    
        <!--自定义appender-->
        <appender name="logmodel1" class="org.apache.log4j.RollingFileAppender">
            <param name="File" value="logs/model1.log"/>  <!--日志路径-->
            <param name="Append" value="false"/> <!--是否追加-->
            <param name="MaxBackupIndex" value="3"/>        <!--最大roll的文件数-->
            <param name="MaxFileSize" value="10240"/> <!--文件size上限-->
            <layout class="org.apache.log4j.PatternLayout">          <!--日志输出格式-->
                <param name="ConversionPattern" value="[%d{dd/MM/yy HH:mm:ss:sss}] %5p %c: %m%n"/>
            </layout>
        </appender>
    
        <!--自定义logger,additivity: 是否遵循缺省的继承机制-->
        <logger name="model1" additivity="false">
            <level value="DEBUG"/>
            <appender-ref ref="logmodel1"/>
        </logger>
        <root>
            <level value="INFO"/>
            <appender-ref ref="CONSOLE"/>
        </root>
    </log4j:configuration>

    简单的模块样例代码:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    
    public class Log4JTest {
        /**
         * root logger
         */
        private static final Logger LOG = LoggerFactory.getLogger(Log4JTest.class);
    
        /**
         * 自定义model1 logger
         */
        private static final Logger MODEL_LOG1 = LoggerFactory.getLogger("model1");
    
        public static void printLog(int i) {
            LOG.info("log something....." + i);
        }
    
        public static void printModelLog1(int i) {
            MODEL_LOG1.info("log info model1 something....." + i);
            MODEL_LOG1.debug("log debug model1 something....." + i);
        }
    
        public static void main(String[] args) throws InterruptedException {
            for (int i=10; i < 20; i++) {
                printLog(i);
                printModelLog1(i);
                Thread.sleep(1000);
            }
        }
    
    }

      然后,普通的日志就直接输出在Console上了,比较核心的printModelLog1中通过MODEL_LOG1将日志输出到logs/model1.log文件中。具体log4j支持哪些appender以及ConversionPattern网上一搜一大把,不再赘述。

  • 相关阅读:
    扫盲如何在ECLIPSE中使用条件断点
    春困
    气虚咳喘案
    知足老师论糖尿病
    辨痰之病位与寒热
    常用中药功效比较(任之堂)
    女子全身窜痛案
    小儿外感案
    紫斑案
    读任之堂中药讲记笔记
  • 原文地址:https://www.cnblogs.com/nexiyi/p/log4j_xml_sample.html
Copyright © 2011-2022 走看看