使用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>

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

<?xml version="1.0" encoding="UTF-8" ?>

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

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

    <!--<Properties>
        &lt;!&ndash; 配置日志文件输出目录,此配置将日志输出到tomcat根目录下的指定文件夹 &ndash;&gt;
        <Property name="LOG_HOME">${sys:catalina.home}/WebAppLogs/SSHExample</Property>
    </Properties>-->

    <Appenders>

        <!--这个输出控制台的配置,这里输出除了warn和error级别的信息到System.out-->
        <Console name="console_out_appender" target="SYSTEM_OUT">
            <!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)
                优先级,即DEBUG,INFO,WARN,ERROR,
            -->
            <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="ACCEPT"/>
            <!-- 输出日志的格式 -->
            <PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n"/>
        </Console>
<!--
        &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;

                &lt;!&ndash; 每个日志文件最大2MB &ndash;&gt;
                <SizeBasedTriggeringPolicy size="2MB"/>

            </Policies>
            <Filters>&lt;!&ndash; 此Filter意思是,只输出debug级别的数据 &ndash;&gt;
                &lt;!&ndash; DENY,日志将立即被抛弃不再经过其他过滤器;
                       NEUTRAL,有序列表里的下个过滤器过接着处理日志;
                       ACCEPT,日志会被立即处理,不再经过剩余过滤器。 &ndash;&gt;
                <ThresholdFilter level="debug" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingRandomAccessFile>

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

                &lt;!&ndash; 每个日志文件最大2MB &ndash;&gt;
                <SizeBasedTriggeringPolicy size="2MB"/>

                &lt;!&ndash; 如果启用此配置,则日志会按文件名生成新压缩文件,
                即如果filePattern配置的日期格式为 %d{yyyy-MM-dd HH} ,则每小时生成一个压缩文件,
                如果filePattern配置的日期格式为 %d{yyyy-MM-dd} ,则天生成一个压缩文件 &ndash;&gt;
                &lt;!&ndash;                 <TimeBasedTriggeringPolicy interval="1" modulate="true" /> &ndash;&gt;

            </Policies>
            <Filters>&lt;!&ndash; 此Filter意思是,只输出debug级别的数据 &ndash;&gt;
                &lt;!&ndash; DENY,日志将立即被抛弃不再经过其他过滤器;
                       NEUTRAL,有序列表里的下个过滤器过接着处理日志;
                       ACCEPT,日志会被立即处理,不再经过剩余过滤器。 &ndash;&gt;
                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingRandomAccessFile>

        &lt;!&ndash; INFO级别日志 &ndash;&gt;
        <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">
            <PatternLayout>
                <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="2MB"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingRandomAccessFile>

        &lt;!&ndash; WARN级别日志 &ndash;&gt;
        <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">
            <PatternLayout>
                <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="2MB"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingRandomAccessFile>

        &lt;!&ndash; ERROR级别日志 &ndash;&gt;
        <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">
            <PatternLayout>
                <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="2MB"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingRandomAccessFile>-->
    </Appenders>

    <Loggers>
        <!-- 配置日志的根节点 -->
        <root level="trace">
            <appender-ref ref="console_out_appender"/>
           <!-- <appender-ref ref="console_err_appender"/>
            <appender-ref ref="trace_appender"/>
            <appender-ref ref="debug_appender"/>
            <appender-ref ref="info_appender"/>
            <appender-ref ref="warn_appender"/>
            <appender-ref ref="error_appender"/>-->
        </root>

        <!-- 第三方日志系统 -->
        <logger name="org.springframework.core" level="info"/>
        <logger name="org.springframework.beans" level="info"/>
        <logger name="org.springframework.context" level="info"/>
        <logger name="org.springframework.web" level="info"/>
        <logger name="org.jboss.netty" level="warn"/>
        <logger name="org.apache.http" level="warn"/>

    </Loggers>

</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

关注微信同步更新:java_Squirrel

时间: 2024-12-20 15:34:57

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

关于android手机不能打印Log日志

作为一个android开发者,当log打印不出来的的时候是很痛苦的.相信有人遇到过ADB连接正常,在开发工具上也正常显示设备信息正常却无法打印log或者只能打印部分log,那不妨可以试试进入工程模式调试一下log日志等级. 我的是360青春版,以此手机为例,首先进入拨号界面输入"*20121220#"(不同的品牌的进入方法不一样,可自行百度),进入界面1: 进入日志输出等级  界面2: 首先确定日志打印是否开启,如未开启请开启 界面3.4: 然后进入log日志等级,已android为例

【原创】ASP.NET Web开发,实现打印Log日志,步骤详解

添加Log需要四步: 一.引用log4net.dll,详见附件:http://pan.baidu.com/s/1c0hab2g 二.项目根目录下,添加 log4net.xml 1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <configSections> 4 <section name="log4net" type="

python logging模块打印log到指定文件

可能我们经常会使用print来输出信息到窗口,但当我们有很多个py文件需要运行,项目比 较庞大的到时候,print简直就是太low了点了.那么我们可以使用强大的logging模块,把 输出到指定的本地pc某个路径的文件中. 一. logging的框架1. Loggers: 可供程序直接调用的接口,app通过调用提供的api来记录日志2. Handlers: 决定将日志记录分配至正确的目的地3. Filters:对日志信息进行过滤, 提供更细粒度的日志是否输出的判断4. Formatters: 制

python日志,支持彩色打印和文件大小切片写入和写入mongodb

支持不同logger name的日志写入不同的文件,不同logger name日志写入不同的mongodb 的collection.LogManager比较容易调用,因为里面的内部方法全都使用了下划线,使用了下划线的就是保护和私有方法不需要外界调用,也不需要看懂他,在调用时候pycharm不会自动补全提示这些带下划线的无关方法了,只暴露了get_and_add_handlers和get_without_handlers两个可能需要调用的方法,pyrcharm可以自动补全这两个方法. 主要思路和模

e.printStackTrace()打印在哪里以及如何e.printStackTrace()的内容打印在日志中

1.e.printStackTrace()打印在哪里 在catch中的e.printStackTrace()将打印到控制台 2.e.printStackTrace()打印的内容是什么 如下代码: import org.apache.logging.log4j.Logger; public class ExceptionTest { private static final Logger logger=LogManager.getLogger(); public void test() { try

JNI中打印log

想要实现打印log最简单的方法: 在.c中包含android/log.h 自定义一个宏来代替log.h中的长段宏: 然后注意要在Android.mk中添加这么一句到: 这样就可以使用像C的printf那样打印一般的log了:

封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类

快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------------------------------------------------------------------------------ 不知众多Android开发者是否在程序开发的工程中也遇到过下面的问题: 0.如何在众多log中快速找到你设置打印的那行log? 1.是否还在不断的切换标签来

解决华为手机不打印Log信息的问题

在安装了Android Studio后,发现了一个很苦恼的事情,就是在程序中的写Log语句,不能正常的在Logcat中打印出来,这对于解决程序bug真是一刀切断,让人无从下手,在各种尝试后,首先我将我写的程序运行到了朋友的手机上,发现可以正常的打印Log,又将朋友写的程序 运行到我的华为手机上,发现没有打印出Log,才发现原来不是Android Studio的问题,而是我用的华为真机的问题,于是就搜索了一番,最后找到了解决的办法来分享给大家: 1.打开手机拨号功能,输入*#*#2846579#*

Android 在屏幕上打印LOG

Android开发中需要迅速定位问题,在Android 屏幕上打印LOG,是一个很好的通道 基本的思路:启动LogService读取指定log,使用WindowManager展示到屏幕上 直接上代码 public class LogService extends Service { private ListView listview; private LinkedList<LogLine> logList = new LinkedList<LogLine>(); private L