有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 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。在登录方法中放置以传递密钥名,在注销方法中移除

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

问题: 痕迹。日志文件附加了所有跟踪,但用户的单个文件并没有在基于用户的日志文件(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) 个答案