如何生成每个类的Log4j日志

时间:2014-07-16 08:22:27

标签: java logging log4j

我想问一下log4j

如何为每个执行的类生成多个log4j文件?

所以我的项目有4个类,现在我使用log4j.properties利用FileAppender设置我的log4j,这样它只为所有类生成一个日志。

我想每个类都有日志文件。如果我有4个班级(A,B,C,D),我希望A.log,B.log,C.log和D.log包含有关每个班级日志活动的信息。

非常感谢。

2 个答案:

答案 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);

}

干杯!