我想问一下log4j
如何为每个执行的类生成多个log4j文件?
所以我的项目有4个类,现在我使用log4j.properties利用FileAppender设置我的log4j,这样它只为所有类生成一个日志。
我想每个类都有日志文件。如果我有4个班级(A,B,C,D),我希望A.log,B.log,C.log和D.log包含有关每个班级日志活动的信息。
非常感谢。
答案 0 :(得分:1)
你可以让你的log4j配置有多个appender指向不同的包
<!-- pkg1 -->
<appender name="LogFromPackage1" class="org.apache.log4j.FileAppender">
<param name="File" value="pkg1.log" />
<param name="Threshold" value="ERROR" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
</layout>
</appender>
<logger name="com.mypkg.pkg1">
<appender-ref ref="LogFromPackage1"/>
</logger>
<!-- pkg2 -->
<appender name="LOGFromPackage2" class="org.apache.log4j.FileAppender">
<param name="File" value="pkg2.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
</layout>
</appender>
<logger name="com.mypkg.pkg2">
<appender-ref ref="LOGFromPackage2"/>
</logger>
答案 1 :(得分:0)
我找到了办法!动态修改log4jproperties!
private void updateLog4jConfig(String className){
Properties props = new Properties();
try{
InputStream configStream = getClass().getResourceAsStream("/log4j.properties");
props.load(configStream);
configStream.close();
} catch(IOException ie){
System.out.println("ERROR! Cannot load Configuration File....");
}
props.setProperty("log4j.appender.LOGGER.File", "./logs/"+className+".log");
org.apache.log4j.LogManager.resetConfiguration();
PropertyConfigurator.configure(props);
}
干杯!