log4j2配置-阿里云开发者社区

开发者社区> 开发与运维> 正文

log4j2配置

简介: Log4j2 Apache Log4j 2 is an upgrade to Log4j that provides significant improvements over its predecessor Table of contents ...

Log4j2

Apache Log4j 2 is an upgrade to Log4j that provides significant improvements over its predecessor


Table of contents

环境搭建

一般java工程:

下载

apache官网给的链接是清华镜像网站的,国外的很多开源的在国内太慢的话不妨尝试一下国内的最大镜像站清华镜像站,下载地址log4j-2.11.0,

配置到环境

To use Log4j 2 in your application make sure that both the API and Core jars are in the application’s classpath. Add the dependencies listed below to your classpath. -----这是官网的原话,翻译过来就是,使用log4j2的方式是,将接口jar和实现jar放到所需项目的classpath中,并添加依赖,具体就是log4j-api-2.11.0.jar和log4j-core-2.11.0.jar

配置文件路径

log4j2.xml可以放在任意的地方,只要你最后把它放到了classpath里,上面的项目中新建一个resources目录用于放置log4j2.xml,如果在未加入classpath时尝试运行时会报如下错误:

ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See <https://logging.apache.org/log4j/2.x/manual/configuration.html> for instructions on how to configure Log4j 2   

大义就是运行的项目没有在classpath 中找到你的配置文件

以Eclipse环境为例,可以在Run—Run Configurations对应项目的Classpath中选择User Entries,点击Advanced,选择Add Folder,把resources文件夹添加进来。

idea环境

熟悉idea的话点击右上方放大镜图标左侧的图标
img_5bbb1f1cf4d8dab6b8d0e3bba087bd9a.png

再点击左侧边栏Project Settings下的Modules
img_6303aca7831d028456def4df44ac20f6.png

扩展一下,点了之后,右侧边栏区域
img_4dcfe2d06b6f5a450f68e6fd8a37beff.png

表示的是已作为classpath的文件夹,这里可以从已设置为classpath的文件夹中取消选择,

取消掉以后记得按下下方的apply保存一下

选中右侧出现的工程目录中你用来存放配置文件log4j2.xml中的文件夹,点击一下选中,再点击resource,右侧边栏就会多出一下你选中的文件,点下方的apply即可

配置详解

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


<!-- monitorInterval,配置为120,单位为秒。即在服务运行过程中发生了log4j2配置文件的修改,log4j2能够在monitorInterval时间范围重新加载配置,无需重启应用。-->
<Configuration status="WARN" monitorInterval="120">


    <properties>
        <!--当输出到文件中的时候使用LOG_HOME替代输出到的文件夹,类似于配置java环境的时候的JAVA_HOME的做法-->
        <!--最好是填写相对路径,基路径是当前项目也就是src的上一级别-->
        <!--如果写成testlog/mylog,即使没有testlog,也会在src同级目录下新建出testlog文件夹以及其下的mylog文件夹-->
        <property name="LOG_HOME">testlog/mylog</property>
    </properties>

    <!--翻译:附加器,记录方式-->
    <Appenders>

        <!--appenders里的两个属性,分别为name=Console和name=log(两个名字是自己起的)-->
        <!--appenders属性同级的loggers中的root的level的值控制输出信息的严格级别,一般是info-->
        <!--root中的AppenderRef的ref写appenders中的name,在这里也就是添Console或log-->

        <!--name是自己命名的,target=SYSTEM_OUT表示输出到控制台-->
        <Console name="Console" target="SYSTEM_OUT">
            <!--pattern控制格式化输出的格式-->
            <!--例子:在代码中写入logger.info("info级别信息");-->
            <!--输出:12:8:34.501 [main] INFO  com.selton.Log4jTest - info级别信息-->
            <PatternLayout pattern="%d{H:m:s.S} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>

        <!--临时日志生成-->
        <!--<File name="log" fileName="log/test.log" append="true">
            <PatternLayout pattern="%d{H:m:s.S} [%t] %-5level %logger{36} - %msg%n"/>
        </File>-->

        <!--fileName:日志存储路径,
        filePattern:历史日志封存路径。其中%d{yyyyMMddHH}表示了封存历史日志的时间单位(目前单位为小时,yyyy表示年,MM表示月,dd表示天,HH表示小时,mm表示分钟,ss表示秒,SS表示毫秒)。
        注意后缀,log4j2自动识别zip等后缀,表示历史日志需要压缩。-->
        <RollingRandomAccessFile name="File" immediateFlush="true" fileName="${LOG_HOME}/today.log"
                                 filePattern="${LOG_HOME}/history-%d{yyyy-MM-dd}.log">

            <!-- level,表示最低接受的日志级别,配置为INFO,即我们期望打印INFO级别以上的日志。-->
            <!--onMatch,表示当日志事件的日志级别与level一致时,应怎么做。一般为ACCEPT,表示接受。-->
            <!--onMismatch,表示日志事件的日志级别与level不一致时,应怎么做。一般为DENY,表示拒绝。也可以为NEUTRAL表示中立。-->
            <Filters>

                <!--最下方的Root level="debug",如果不设置这句的话,4个级别信息都会打印,设置后,就会只打印INFO以及之上-->
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>

            <!--输出到文件夹中去-->
            <PatternLayout pattern="%d{y-M-d H:m:s.S} [%t] %-5level %logger{36} - %msg%n" />
            <!--<HTMLLayout pattern="%d{y-M-d H:m:s.S} [%t] %-5level %logger{36} - %msg%n" />-->

            <!--必配项,TriggeringPolicy(触发策略) -->
            <Policies>
                <!--按天,划分日志文件-->
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>

            <!--必配项,RolloverStrategy(覆盖策略)-->
            <!--<DefaultRolloverStrategy max="20"/>-->
        </RollingRandomAccessFile>

    </Appenders>

    <Loggers>
        <Root level="debug">
            <AppenderRef ref="File"/>
        </Root>
    </Loggers>

</Configuration>

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章