• 使用log4j2打印Log,log4j不能打印日志信息,log4j2不能打印日志信息,log4j和logj2,idea控制台信息乱码(文末)


      说来惭愧,今天就写了个"hello world",了解了一下log4j的日志。

      本来是想在控制台打印个log信息,也是遇到坎坷重重,开始也没去了解log4j就来使用,log4j配置文件开始用的log4j.properties,结果控制台一直打印ERROR StatusLogger No log4j2 configuration file found.也就是Log4j2配置文件没找到的意思。

      我就把log4j.properties文件名改成log4j2.properties,结果不报错了,但是就是不打印日志,直接就结束运行了(Process finished with exit code 0),现在想想好愚蠢啊。

      后来经过百般折腾,发现log4j是log4j,log4j2是log4j2,不能混用啊,但它们都是出自同一个公司,log4j2顾名思义是第二代,是log4j的优化升级版。

      log4j的配置文件是log4j.properties,是以.properties后缀名结尾的文件命名,而log4j2的配置文件一般是xml文件或json,以.xml或.json后缀格式的命名,log4j更新到1.2.17版就停止了更新,发布了Log4j2;

      我加入的jar包一直是log4j2的jar包,开始使用了log4j的配置文件(log4j.properties),所以一直打印不出来。后来重新加入配置文件log4j2.xml后,就可以打印了。

      maven的pom.xml文件中加入的依赖:加入log4j的实现和log4j核心包,如果版本号(version)在2.0以下,配置文件就是.properties了哦

    复制代码
     <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-slf4j-impl</artifactId>
                <version>2.6.2</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.6.2</version>
            </dependency>
    复制代码

      如果是springboot项目:需要排除一个logback的jar包,以免冲突:

    复制代码
        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                    <!--log4j-slf4j-impl与 logback-classic包不兼容,删除这个包 -->
                        <groupId>ch.qos.logback</groupId>
                        <artifactId>logback-classic</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    复制代码

      log4j2.xml文件:网上复制的一个,写的挺全,由于我只用到在控制台打印输出,所以我把没用到的都注释了。

      后面用到了文件输出,需要的可以点击查看:http://www.cnblogs.com/hyyq/p/7171227.html

    复制代码
    <?xml version="1.0" encoding="UTF-8" ?>
    

    <!--
    status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
    monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。

    注:本配置文件的目标是将不同级别的日志输出到不同文件,最大2MB一个文件,
    文件数据达到最大值时,旧数据会被压缩并放进指定文件夹
    

    -->
    <Configuration status="WARN" monitorInterval="600">

    <span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&lt;Properties&gt;
        &amp;lt;!&amp;ndash; 配置日志文件输出目录,此配置将日志输出到tomcat根目录下的指定文件夹 &amp;ndash;&amp;gt;
        &lt;Property name="LOG_HOME"&gt;${sys:catalina.home}/WebAppLogs/SSHExample&lt;/Property&gt;
    &lt;/Properties&gt;</span><span style="color: #008000;">--&gt;</span>
    
    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Appenders</span><span style="color: #0000ff;">&gt;</span>
    
        <span style="color: #008000;">&lt;!--</span><span style="color: #008000;">这个输出控制台的配置,这里输出除了warn和error级别的信息到System.out</span><span style="color: #008000;">--&gt;</span>
        <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Console </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="console_out_appender"</span><span style="color: #ff0000;"> target</span><span style="color: #0000ff;">="SYSTEM_OUT"</span><span style="color: #0000ff;">&gt;</span>
            <span style="color: #008000;">&lt;!--</span><span style="color: #008000;"> 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)
                优先级,即DEBUG,INFO,WARN,ERROR,
            </span><span style="color: #008000;">--&gt;</span>
            <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">ThresholdFilter </span><span style="color: #ff0000;">level</span><span style="color: #0000ff;">="ERROR"</span><span style="color: #ff0000;"> onMatch</span><span style="color: #0000ff;">="DENY"</span><span style="color: #ff0000;"> onMismatch</span><span style="color: #0000ff;">="ACCEPT"</span><span style="color: #0000ff;">/&gt;</span>
            <span style="color: #008000;">&lt;!--</span><span style="color: #008000;"> 输出日志的格式 </span><span style="color: #008000;">--&gt;</span>
            <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">PatternLayout </span><span style="color: #ff0000;">pattern</span><span style="color: #0000ff;">="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n"</span><span style="color: #0000ff;">/&gt;</span>
        <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Console</span><span style="color: #0000ff;">&gt;</span>
    

    <!--
    &lt;!&ndash;这个输出控制台的配置,这里输出warn和error级别的信息到System.err,在eclipse控制台上看到的是红色文字&ndash;&gt;
    <Console name="console_err_appender" target="SYSTEM_ERR">
    &lt;!&ndash; 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) &ndash;&gt;
    <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
    &lt;!&ndash; 输出日志的格式 &ndash;&gt;
    <PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n"/>
    </Console>
    -->

    <!-- &lt;!&ndash; TRACE级别日志 &ndash;&gt;
    &lt;!&ndash; 设置日志格式并配置日志压缩格式,压缩文件独立放在一个文件夹内,
    日期格式不能为冒号,否则无法生成,因为文件名不允许有冒号,此appender只输出trace级别的数据到trace.log &ndash;&gt;
    <RollingRandomAccessFile name="trace_appender"
    immediateFlush="true" fileName="${LOG_HOME}/trace.log"
    filePattern="${LOG_HOME}/trace/trace - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
    <PatternLayout>
    <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
    </PatternLayout>
    <Policies>&lt;!&ndash; 两个配置任选其一 &ndash;&gt;

                &amp;lt;!&amp;ndash; 每个日志文件最大2MB &amp;ndash;&amp;gt;
                &lt;SizeBasedTriggeringPolicy size="2MB"/&gt;
    
            &lt;/Policies&gt;
            &lt;Filters&gt;&amp;lt;!&amp;ndash; 此Filter意思是,只输出debug级别的数据 &amp;ndash;&amp;gt;
                &amp;lt;!&amp;ndash; DENY,日志将立即被抛弃不再经过其他过滤器;
                       NEUTRAL,有序列表里的下个过滤器过接着处理日志;
                       ACCEPT,日志会被立即处理,不再经过剩余过滤器。 &amp;ndash;&amp;gt;
                &lt;ThresholdFilter level="debug" onMatch="DENY" onMismatch="NEUTRAL"/&gt;
                &lt;ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/&gt;
            &lt;/Filters&gt;
        &lt;/RollingRandomAccessFile&gt;
    
        &amp;lt;!&amp;ndash; DEBUG级别日志 &amp;ndash;&amp;gt;
        &amp;lt;!&amp;ndash; 设置日志格式并配置日志压缩格式,压缩文件独立放在一个文件夹内,
        日期格式不能为冒号,否则无法生成,因为文件名不允许有冒号,此appender只输出debug级别的数据到debug.log &amp;ndash;&amp;gt;
        &lt;RollingRandomAccessFile name="debug_appender"
                                 immediateFlush="true" fileName="${LOG_HOME}/debug.log"
                                 filePattern="${LOG_HOME}/debug/debug - %d{yyyy-MM-dd HH_mm_ss}.log.gz"&gt;
            &lt;PatternLayout&gt;
                &lt;pattern&gt;%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n&lt;/pattern&gt;
            &lt;/PatternLayout&gt;
            &lt;Policies&gt;&amp;lt;!&amp;ndash; 两个配置任选其一 &amp;ndash;&amp;gt;
    
                &amp;lt;!&amp;ndash; 每个日志文件最大2MB &amp;ndash;&amp;gt;
                &lt;SizeBasedTriggeringPolicy size="2MB"/&gt;
    
                &amp;lt;!&amp;ndash; 如果启用此配置,则日志会按文件名生成新压缩文件,
                即如果filePattern配置的日期格式为 %d{yyyy-MM-dd HH} ,则每小时生成一个压缩文件,
                如果filePattern配置的日期格式为 %d{yyyy-MM-dd} ,则天生成一个压缩文件 &amp;ndash;&amp;gt;
                &amp;lt;!&amp;ndash;                 &lt;TimeBasedTriggeringPolicy interval="1" modulate="true" /&gt; &amp;ndash;&amp;gt;
    
            &lt;/Policies&gt;
            &lt;Filters&gt;&amp;lt;!&amp;ndash; 此Filter意思是,只输出debug级别的数据 &amp;ndash;&amp;gt;
                &amp;lt;!&amp;ndash; DENY,日志将立即被抛弃不再经过其他过滤器;
                       NEUTRAL,有序列表里的下个过滤器过接着处理日志;
                       ACCEPT,日志会被立即处理,不再经过剩余过滤器。 &amp;ndash;&amp;gt;
                &lt;ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/&gt;
                &lt;ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/&gt;
            &lt;/Filters&gt;
        &lt;/RollingRandomAccessFile&gt;
    
        &amp;lt;!&amp;ndash; INFO级别日志 &amp;ndash;&amp;gt;
        &lt;RollingRandomAccessFile name="info_appender"
                                 immediateFlush="true" fileName="${LOG_HOME}/info.log"
                                 filePattern="${LOG_HOME}/info/info - %d{yyyy-MM-dd HH_mm_ss}.log.gz"&gt;
            &lt;PatternLayout&gt;
                &lt;pattern&gt;%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n&lt;/pattern&gt;
            &lt;/PatternLayout&gt;
            &lt;Policies&gt;
                &lt;SizeBasedTriggeringPolicy size="2MB"/&gt;
            &lt;/Policies&gt;
            &lt;Filters&gt;
                &lt;ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/&gt;
                &lt;ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/&gt;
            &lt;/Filters&gt;
        &lt;/RollingRandomAccessFile&gt;
    
        &amp;lt;!&amp;ndash; WARN级别日志 &amp;ndash;&amp;gt;
        &lt;RollingRandomAccessFile name="warn_appender"
                                 immediateFlush="true" fileName="${LOG_HOME}/warn.log"
                                 filePattern="${LOG_HOME}/warn/warn - %d{yyyy-MM-dd HH_mm_ss}.log.gz"&gt;
            &lt;PatternLayout&gt;
                &lt;pattern&gt;%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n&lt;/pattern&gt;
            &lt;/PatternLayout&gt;
            &lt;Policies&gt;
                &lt;SizeBasedTriggeringPolicy size="2MB"/&gt;
            &lt;/Policies&gt;
            &lt;Filters&gt;
                &lt;ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/&gt;
                &lt;ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/&gt;
            &lt;/Filters&gt;
        &lt;/RollingRandomAccessFile&gt;
    
        &amp;lt;!&amp;ndash; ERROR级别日志 &amp;ndash;&amp;gt;
        &lt;RollingRandomAccessFile name="error_appender"
                                 immediateFlush="true" fileName="${LOG_HOME}/error.log"
                                 filePattern="${LOG_HOME}/error/error - %d{yyyy-MM-dd HH_mm_ss}.log.gz"&gt;
            &lt;PatternLayout&gt;
                &lt;pattern&gt;%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n&lt;/pattern&gt;
            &lt;/PatternLayout&gt;
            &lt;Policies&gt;
                &lt;SizeBasedTriggeringPolicy size="2MB"/&gt;
            &lt;/Policies&gt;
            &lt;Filters&gt;
                &lt;ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/&gt;
            &lt;/Filters&gt;
        &lt;/RollingRandomAccessFile&gt;</span><span style="color: #008000;">--&gt;</span>
    <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Appenders</span><span style="color: #0000ff;">&gt;</span>
    
    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Loggers</span><span style="color: #0000ff;">&gt;</span>
        <span style="color: #008000;">&lt;!--</span><span style="color: #008000;"> 配置日志的根节点 </span><span style="color: #008000;">--&gt;</span>
        <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">root </span><span style="color: #ff0000;">level</span><span style="color: #0000ff;">="trace"</span><span style="color: #0000ff;">&gt;</span>
            <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">appender-ref </span><span style="color: #ff0000;">ref</span><span style="color: #0000ff;">="console_out_appender"</span><span style="color: #0000ff;">/&gt;</span>
           <span style="color: #008000;">&lt;!--</span><span style="color: #008000;"> &lt;appender-ref ref="console_err_appender"/&gt;
            &lt;appender-ref ref="trace_appender"/&gt;
            &lt;appender-ref ref="debug_appender"/&gt;
            &lt;appender-ref ref="info_appender"/&gt;
            &lt;appender-ref ref="warn_appender"/&gt;
            &lt;appender-ref ref="error_appender"/&gt;</span><span style="color: #008000;">--&gt;</span>
        <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">root</span><span style="color: #0000ff;">&gt;</span>
    
        <span style="color: #008000;">&lt;!--</span><span style="color: #008000;"> 第三方日志系统 </span><span style="color: #008000;">--&gt;</span>
        <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">logger </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="org.springframework.core"</span><span style="color: #ff0000;"> level</span><span style="color: #0000ff;">="info"</span><span style="color: #0000ff;">/&gt;</span>
        <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">logger </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="org.springframework.beans"</span><span style="color: #ff0000;"> level</span><span style="color: #0000ff;">="info"</span><span style="color: #0000ff;">/&gt;</span>
        <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">logger </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="org.springframework.context"</span><span style="color: #ff0000;"> level</span><span style="color: #0000ff;">="info"</span><span style="color: #0000ff;">/&gt;</span>
        <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">logger </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="org.springframework.web"</span><span style="color: #ff0000;"> level</span><span style="color: #0000ff;">="info"</span><span style="color: #0000ff;">/&gt;</span>
        <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">logger </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="org.jboss.netty"</span><span style="color: #ff0000;"> level</span><span style="color: #0000ff;">="warn"</span><span style="color: #0000ff;">/&gt;</span>
        <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">logger </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="org.apache.http"</span><span style="color: #ff0000;"> level</span><span style="color: #0000ff;">="warn"</span><span style="color: #0000ff;">/&gt;</span>
    
    <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Loggers</span><span style="color: #0000ff;">&gt;</span>
    

    </Configuration>

    复制代码

      番外篇:

      我在代码中打印的是info级别的log,里面有中文,没想到idea工具的控制台输出乱码了,解决方法是在idea安装目录下的bin目录下的idea.exe.vmoptions文件的最后一行加入”-Dfile.encoding=UTF-8"(没有双引号),并把idea工程编码也改成utf-8(一般是默认utf-8),修改方式是file-->settings-->editor-->file encoding ,见下图,然后重启idea就可以了。

    2017.5.6

    原文地址:https://www.cnblogs.com/hyyq/p/6818912.html

  • 相关阅读:
    Javascript构造函数的继承
    什么数据库能抗住《王者荣耀》的1亿DAU?
    支持微信支付亿级请求的TBase数据库大揭秘
    我在MySQL的那些年(一)
    谁是银行核心数据库的破局者?
    X侦探所事件薄 | 一次内存溢出之谜
    腾讯云数据库新生代产品获国家级认证
    POJ 2594 传递闭包的最小路径覆盖
    POJ 1719 二分图最大匹配(记录路径)
    HDU 1533 KM算法(权值最小的最佳匹配)
  • 原文地址:https://www.cnblogs.com/jpfss/p/12119496.html
Copyright © 2020-2023  润新知