log4j2的简单使用

log4j2的官网地址:https://logging.apache.org/log4j/2.x/

log4j2的性能比log4j更好,具体优点很多,高并发下性能更好啊,不会发生死锁的情况。

SpringBoot使用log4j2需添加如下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

该依赖已经添加了slf4j的依赖,其实就是slf4j作为借口,log4j2作为其实现类。所以在项目的其他依赖中需要去除其他日志的实现类。

查看项目的依赖树,可使用命令:

mvn dependency:tree

还需要在classpath下添加log4j2.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!-- Configuration的属性status设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!-- Configuration的属性strict设置语法的严格性 -->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数, 最少是5秒-->
<Configuration status="WARN" strict="true">

    <!--全局属性 -->
    <Properties>
        <Property name="local.logging.path">E:/logs</Property>
        <Property name="logging.file.path">${local.logging.path}/${project.name}</Property>
        <Property name="action.file.path">${logging.file.path}</Property>
        <Property name="project.name">example-learning</Property>
        <Property name="logging.file.name">${sys:logging.file.path}/${project.name}.log</Property>
        <Property name="logging.file.riderAccount.name">${sys:logging.file.path}/riderAccount/riderAccount.log</Property>
        <Property name="logging.file.warn.name">${sys:logging.file.path}/${project.name}-warn.log</Property>
        <Property name="logging.file.error.name">${sys:logging.file.path}/${project.name}-error.log</Property>
        <Property name="logging.file.action.name">${sys:action.file.path}/${project.name}-action.log</Property>
        <Property name="logging.file.monitor.name">${sys:logging.file.path}/monitor.log</Property>
        <Property name="layout">%d %p [%t] %c{13}:%M:%L %m%n</Property>
    </Properties>

    <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html -->
    <!-- 定义日志输出目的地,以及方式,以及日志输出格式 -->
    <Appenders>
        <!-- 定义输出到控制台的Appender-->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="${layout}" />
        </Console>

        <RollingRandomAccessFile name="RollingRandomAccessFile"
            immediateFlush="true" fileName="${logging.file.name}"
            filePattern="${logging.file.name}-%d{yyyy-MM-dd-HH}">
            <PatternLayout pattern="${layout}" />
            <ThresholdFilter level="debug" />
            <TimeBasedTriggeringPolicy />
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="RollingRandomAccessFileWarn"
            immediateFlush="true" fileName="${logging.file.warn.name}"
            filePattern="${logging.file.warn.name}-%d{yyyy-MM-dd}">
            <PatternLayout pattern="${layout}" />
            <ThresholdFilter level="warn" />
            <TimeBasedTriggeringPolicy />
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="RollingRandomAccessFileError"
            immediateFlush="true" fileName="${logging.file.error.name}"
            filePattern="${logging.file.error.name}-%d{yyyy-MM-dd}">
            <PatternLayout pattern="${layout}" />
            <ThresholdFilter level="error" />
            <TimeBasedTriggeringPolicy />
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="actionLogFile"
            immediateFlush="true" fileName="${logging.file.action.name}"
            filePattern="${logging.file.action.name}.%d{yyyy-MM-dd}">
            <PatternLayout pattern="%m%n" />
            <ThresholdFilter level="debug" />
            <TimeBasedTriggeringPolicy />
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="monitorLogFile"
            immediateFlush="true" fileName="${logging.file.monitor.name}"
            filePattern="${logging.file.monitor.name}.%d{yyyy-MM-dd}">
            <PatternLayout pattern="%m%n" />
            <ThresholdFilter level="info" />
            <TimeBasedTriggeringPolicy />
        </RollingRandomAccessFile>
    </Appenders>

    <!-- Root和Logger两个节点;
        Root节点表示项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出
        LoggerLogger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等 -->
    <Loggers>

        <!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等;
            level: 属性level,日志输出级别;
            name: 属性name,用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点;
            additivity: 属性additivity,默认为true。
            appender-ref: Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root,
                        如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出;
                        此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。-->
        <Logger name="com.example.monitor.client.MonitorUtilImpl" level="info" additivity="false">
            <appender-ref ref="monitorLogFile"/>
        </Logger>

        <Logger name="com.example" level="debug" />

        <!--Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出;
            level -> Root的属性,日志的输出级别;
            AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender. -->
        <Root level="info">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingRandomAccessFile" />
            <AppenderRef ref="RollingRandomAccessFileWarn" />
            <AppenderRef ref="RollingRandomAccessFileError" />
        </Root>

    </Loggers>
</Configuration>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值