我的路由log4j2.xml应该是基于用户登录的角色日志文件。
假设用户连续3天登录应用程序,并在半小时内完成他的工作,然后注销。因此,根据要求,应为已记录的用户创建3个日志文件(每天一个文件在单独的文件中) 像例如
john-20-11-2015.log,
john-21-11-2015.log,
john-22-11-2015.log
下面是Log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Configuration status="WARN" name="MySite" monitorInterval="30">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout>
<pattern>[%-5level] [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%c{1}] - %msg%n</pattern>
</PatternLayout>
</Console>
<RollingFile name="error-log"
fileName="D:/myLogs/error [${date:yyyy-MM-dd}].log" filePattern="D:/myLogs/error-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%c{1}] - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
<RollingFile name="trace-log"
fileName="D:/myLogs/trace [${date:yyyy-MM-dd}].log" filePattern="D:/myLogs/trace-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%c{1}] - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
<Routing name="RoutingAppender">
<Routes pattern="$${ctx:logFileName}">
<Route>
<RollingFile name="Rolling-${ctx:logFileName}" append="true"
fileName="D:/myLogs/${ctx:logFileName}~${date:yyyy-MM-dd}.log"
filePattern="D:/myLogs/%d{yyyy-MM-dd}-%i.log">
<PatternLayout
pattern="SERVER-LOG: [%-5level] [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%logger{1}] - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
</Route>
<Route ref="Console" key="$${ctx:logFileName}" />
</Routes>
</Routing>
</Appenders>
<Loggers>
<Root level="trace" additivity="false">
<Appender-Ref ref="Console"/>
<appender-ref ref="error-log" level="error"/>
<appender-ref ref="trace-log" level="trace"/>
<Appender-Ref ref="RoutingAppender" />
</Root>
</Loggers>
</Configuration>
我正在打电话
ThreadContext.put("logFileName", userName);
将日志附加到路由追加器中,日志正确地附加在相应的日志中 我在注销方法
期间清除threadcontextThreadContext.remove("logFileName");
ThreadContext.clearAll();
我在tomcat中托管了我的应用程序。日志文件是根据记录的用户为每个用户根据文件名模式生成的,但日志不是每天生成的,而是在前一天日志中附加当前用户日志
例如:john-20-11-2015.log包含21日和22日的日志
仅在tomcat停止启动时才将其作为新日志文件。
伙计们帮帮我..有什么不对吗
答案 0 :(得分:1)
我想你想要DailyRollingFileAppender here is an example
另请查看similar question
示例:
<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
...
<param name="DatePattern" value="'.'yyyy-MM-dd" />
...
</appender>
答案 1 :(得分:0)
仅在创建appender时评估filename属性。它在每次翻转时都不会改变。您应该在每个翻转中获得一个新文件,其中包含正确的日期。
这不是你所看到的吗?