Log4j2多线程日志配置

@Plugin(name = "thread", category = StrLookup.CATEGORY)
public class ThreadLookup implements StrLookup{
    @Override
    public String lookup(String key) {
        return Thread.currentThread().getName();
    }

    @Override
    public String lookup(LogEvent event, String key) {
        return event.getThreadName() ==null ? Thread.currentThread().getName() : event.getThreadName();
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!--status="WARN" :用于设置log4j2自身内部日志的信息输出级别,默认是OFF-->
<!--monitorInterval="30"  :间隔秒数,自动检测配置文件的变更和重新配置本身-->
<configuration status="WARN" monitorInterval="30">

    <appenders>
        <!--这个输出控制台的配置-->
        <Console name="STDOUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <!-- 输出日志的格式-->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L]  - %msg%n"
                           charset="UTF-8"/>
        </Console>

        <Routing name="FILE-INFO-${thread:threadName}">
            <Routes pattern="$${thread:threadName}">

                <Route>
                    <RollingRandomAccessFile name="FILE-INFO-${thread:threadName}"
                                             fileName="logs/trace-info-${thread:threadName}.log"
                                             filePattern="logs/trace-info-${thread:threadName}.%d{yyyy-MM-dd}.log">
                        <!--只输出info级别信息-->
                        <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
                        <PatternLayout
                                pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] %logger{50} - %msg%n"
                                charset="UTF-8"/>
                        <Policies>
                            <!--时间策略,每隔24小时产生新的日志文件-->
                            <TimeBasedTriggeringPolicy/>
                            <!--大小策略,每到10M时产生新的日志文件-->
                            <SizeBasedTriggeringPolicy size="10 MB"/>
                        </Policies>
                        <DefaultRolloverStrategy max="1">
                            <Delete basePath="logs" maxDepth="2">
                                <IfFileName glob="*trace-info.*.log"/>
                                <IfLastModified age="1d"/>
                            </Delete>
                        </DefaultRolloverStrategy>
                    </RollingRandomAccessFile>
                </Route>
            </Routes>
        </Routing>

        <Routing name="FILE-DEBUG-${thread:threadName}">
            <Routes pattern="$${thread:threadName}">
                <Route>
                    <RollingRandomAccessFile name="FILE-DEBUG-${thread:threadName}"
                                             fileName="logs/trace-debug-${thread:threadName}.log"
                                             filePattern="logs/trace-debug-${thread:threadName}.%d{yyyy-MM-dd}.log">
                        <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
                        <PatternLayout
                                pattern="%d{yyyy-MM-dd HH:mm:ss.SSS}  [%t] %-5level [%logger{50}:%L] %logger{50} - %msg%n"
                                charset="UTF-8"/>
                        <Policies>
                            <TimeBasedTriggeringPolicy/>
                            <SizeBasedTriggeringPolicy size="10 MB"/>
                        </Policies>
                        <DefaultRolloverStrategy max="1">
                            <Delete basePath="logs" maxDepth="2">
                                <IfFileName glob="*trace-debug.*.log"/>
                                <IfLastModified age="1d"/>
                            </Delete>
                        </DefaultRolloverStrategy>
                    </RollingRandomAccessFile>
                </Route>
            </Routes>
        </Routing>

        <Routing name="FILE-WARN-${thread:threadName}">
            <Routes pattern="$${thread:threadName}">
                <Route>
                    <RollingRandomAccessFile name="FILE-WARN-${thread:threadName}"
                                             fileName="logs/trace-warn-${thread:threadName}.log"
                                             filePattern="logs/trace-warn-${thread:threadName}.%d{yyyy-MM-dd}.log">
                        <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
                        <PatternLayout
                                pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] %logger{50} - %msg%n"
                                charset="UTF-8"/>
                        <Policies>
                            <TimeBasedTriggeringPolicy/>
                            <SizeBasedTriggeringPolicy size="10 MB"/>
                        </Policies>
                        <DefaultRolloverStrategy max="1">
                            <Delete basePath="logs" maxDepth="2">
                                <IfFileName glob="*trace-warn.*.log"/>
                                <IfLastModified age="1d"/>
                            </Delete>
                        </DefaultRolloverStrategy>
                    </RollingRandomAccessFile>
                </Route>
            </Routes>
        </Routing>

        <Routing name="FILE-ERROR-${thread:threadName}">
            <Routes pattern="$${thread:threadName}">
                <Route>
                    <RollingRandomAccessFile name="FILE-ERROR-${thread:threadName}"
                                             fileName="logs/trace-error-${thread:threadName}.log"
                                             filePattern="logs/trace-error-${thread:threadName}.%d{yyyy-MM-dd}.log">
                        <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
                        <PatternLayout
                                pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L %M] %logger{50} - %msg%n"
                                charset="UTF-8"/>
                        <Policies>
                            <TimeBasedTriggeringPolicy/>
                            <SizeBasedTriggeringPolicy size="10 MB"/>
                        </Policies>
                        <DefaultRolloverStrategy max="1">
                            <Delete basePath="logs" maxDepth="2">
                                <IfFileName glob="*trace-error.*.log"/>
                                <IfLastModified age="1d"/>
                            </Delete>
                        </DefaultRolloverStrategy>
                    </RollingRandomAccessFile>
                </Route>
            </Routes>
        </Routing>
        <Async name="async" bufferSize="262144" includeLocation="true">
            <AppenderRef ref="FILE-INFO-${thread:threadName}"/>
            <AppenderRef ref="FILE-DEBUG-${thread:threadName}"/>
            <AppenderRef ref="FILE-WARN-${thread:threadName}"/>
            <AppenderRef ref="FILE-ERROR-${thread:threadName}"/>
            <!-- 只要是级别比INFO高的,包括INFO就输出到控制台 -->
            <appender-ref ref="STDOUT" level="INFO"/>
        </Async>
    </appenders>

    <loggers>
        <!--Logger用于定义log的level以及所采用的appender,如果无需自定义,可以使用root解决,root标签是log的默认输出形式-->
        <!-- 级别顺序(低到高):TRACE < DEBUG < INFO < WARN < ERROR < FATAL -->
        <!-- 配置addtivity="true" 默认是true,标识向上级传递日志(INFO是DEBUG的上级)。只有显示指定为false时,才不会向上级输出 -->
        <AsyncLogger level="DEBUG" name="com.chy.trace.dao" includeLocation="true" additivity="false">
            <appender-ref ref="FILE-DEBUG-${thread:threadName}"/>
        </AsyncLogger>
        <AsyncRoot level="INFO" includeLocation="true">
            <AppenderRef ref="async"/>
        </AsyncRoot>
    </loggers>
</configuration>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值