Log4j2:动态创建基于用户的日志文件

时间:2015-08-12 14:30:26

标签: java logging configuration log4j log4j2

这是我的方案: 我想记录用户从登录到注销时的所有活动。每个日志需要根据附加日期的用户名存储在一个文件中,日志文件将如下所示“sam-2015-08-12.log”。

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE xml>
    <Configuration status="WARN" name="PBMobile">
        <Appenders>

            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level  %logger{36} - %msg%n" />
            </Console>

            <RollingFile name="error-log" append="true" fileName="D:/applog/error.log"
                filePattern="C:/applog/error-%d{yyyy-MM-dd}.log">
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level  %logger{36} - %msg%n" />
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1"
                        modulate="true" />
                    <SizeBasedTriggeringPolicy size="250 MB" />
                </Policies>
            </RollingFile>

            <RollingFile name="trace-log" append="true" fileName="D:/applog/trace.log"
                filePattern="D:/applog/trace-%d{yyyy-MM-dd}.log">
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level  %logger{36} - %msg%n" />
                <SizeBasedTriggeringPolicy size="512 MB" />
            </RollingFile>

            <Routing name="RoutingAppender">
                <Routes pattern="$${ctx:keyname}">
                    <Route>
                        <RollingFile name="Rolling-${ctx:keyname}"
                            fileName="D:/applog/${ctx:keyname}-${date:yyyy-MM-dd}.log"
                            filePattern="D:/applog/${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.log.gz">
                            <PatternLayout
                                pattern="%d{ABSOLUTE} %level{length=5} [%thread] %logger{1} - %msg%n" />
                            <Policies>
                                <TimeBasedTriggeringPolicy interval="6"
                                    modulate="true" />
                                <SizeBasedTriggeringPolicy size="10 MB" />
                            </Policies>

                        </RollingFile>
                    </Route>
                    <Route ref="Console" key="${ctx:keyname}" />
                </Routes>
            </Routing>
        </Appenders>
        <Loggers>
            <Root level="trace" additivity="false">
                <Appender-Ref ref="Console" level="trace" />
                <Appender-Ref ref="trace-log" level="trace" />
                <Appender-Ref ref="error-log" level="error" />
                <Appender-Ref ref="RoutingAppender" />
            </Root>
        </Loggers>
    </Configuration>

我使用Threadcontext.put在登录方法期间传递keyname并在logout方法中删除

public string userlogin()
{
    {codes}.
    ThreadContext.put("keyname", User.getusername());
    {codes}.
    logger.trace("Login Success");
    return value;
}

问题: trace.log文件附加了所有跟踪,但用户的单个文件未在基于用户的日志文件(sam-2015-08-12.log)中附加该特定用户活动的日志详细信息。

只有一行附加了单独的日志文件(sam-2015-08-12.log)

19:15:24,112 TRACE [http-nio-9090-exec-5] Userlogin - Login Success

如果第二个用户同时登录该应用程序,则为第二个用户创建“mark-2015-08-12.log”文件,然后将第二个用户的日志详细信息附加到第一个用户日志文件“sam” -2015-08-12.log”。这些日志也只附加少数活动,然后两个文件都没有附加日志。

伙计们帮帮我,这个配置有什么错误吗?我是这个日志记录平台的新手。我使用来自互联网的示例和示例准备了日志记录配置。 是否有其他适合我要求的测井平台,请建议我......

0 个答案:

没有答案