【发布时间】:2014-09-22 10:13:20
【问题描述】:
我使用 apache log4j 进行应用程序日志记录。当我的应用程序服务器启动时,我使用 log4j.xml 来初始化记录器。对于每个类,我调用 Loggers.getLogger("loggername") 来获取日志实例以记录该类的详细信息。
例如: 在 log4j.xml 中
<appender name="default" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="${log.dir}/logs/serverout.txt" />
<param name ="Append" value="TRUE"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{[HH:mm:ss:SSS]|[MM-dd-yyyy]}|[%c]|[%p]|[%L]: %m|%n"/>
</layout>
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="100"/>
</appender>
<logger name="com.mypackage" additivity="false">
<level value="INFO"/>
<appender-ref ref="default"/>
</logger>
以及我如何在每个类中调用
private static Logger logger = Logger.getLogger(MPMyclass.class.getName());
我的要求: 基本上,当有很多用户会话时,我会运行一个应用程序服务器。每个会话都有一个唯一的 sessionId。每个会话都是几个类的实例。每个类都有自己的 Logger 实例。如果我想为特定类(MPMyclass)启用日志级别。我可以获取记录器名称(com.mypackage)并设置其级别,以便它更改整体级别。但我希望它以某种方式设置,以便我只能设置到特定会话而不是整体。 如果我有一个类名 MPMyclass ,有很多 MPMyclass 实例,我的要求是更改该类实例的记录器级别,而不是所有实例。
可能的解决方案: 1. 每个会话/实例都有一个唯一的 sessionId。所以我可以获取/设置级别。但这太复杂了,因为有很多类很难设置/获取。 2.我可以有一个Hashtable来存储每个类的实例及其unqiue sessionid,但也不建议这样做,因为类和类的实例太多,这不是一个好的解决方案。
我正在努力在 log4j 的帮助下或通过 Java 设计通过简单的解决方案来解决这个问题。如果有什么我可以做的,请建议我。
谢谢
【问题讨论】: