2011-12-27 48 views
0

我的应用程序使用记录有两种方式.... 1)程序化2)的log4j.xml 我有两个(1使用程序化和其他使用的log4j.xml中创建日志文件)位置。的Log4j:有趣的问题,需要解决

程序化的方式(多了一个属性文件中,所有的东西都提像日志级别和所有....让say..thorugh这...文件越来越created..name为“SAS_VP。日志“):

Enumeration loggers = Logger.getRootLogger().getLoggerRepository().getCurrentLoggers(); 
    ...... 
    Logger temp = (Logger)iter.next();             
    temp.setLevel(level); 

的log4j.xml

<appender name="FILE" class="org.apache.log4j.RollingFileAppender"> 
    <param name="File" value="/LOGS/SAM/SAM_VJ.log"/> 
    <param name="Threshold" value="DEBUG"/> 
    <param name="MaxFileSize" value="10000KB"/> 
    <param name="MaxBackupIndex" value="10"/> 
    <param name="Append" value="false"/> 

<layout class="org.apache.log4j.PatternLayout"> 

    <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %5p [%F(% M):%L] %m%n"/> 

</layout> 

</appender> 


<root> 
<appender-ref ref="CONSOLE"/> 
<appender-ref ref="FILE"/> 
</root> 

问题:

日志级别,我设定编程覆盖 log4j.xml.Like中的log4j.xml日志级别设置的级别“调试”,并通过编程我已经设置了级别为“错误”,那么文件(SAM_VJ.log),它由创建log4j.xml只包含ERROR级别日志。

如何解决这个问题...我想...我的两个日志记录(编程和log4j)应该是独立的。

是否有任何的log4j中...如果我已经设置了一个包“com.sas”的日志级别为“调试”,那么没有人可以修改...像可变类型

<logger name="com.sam">  
<priority value="DEBUG"/> 
</logger> 

寻找你的建议....

回答

0

我不确定你真的应该问这样的功能。 你在谈论的方式来配置log4j的框架,是的,它支持3种不同的配置方式:

  1. 属性文件
  2. xml配置
  3. 编程,通过Java代码

对我来说编程配置允许更改log4j记录器/ appenders的配置状态。

您的xml配置应在系统启动时加载,然后应用覆盖配置的java代码。

如果您有用Java提供配置的逻辑,那么为什么不改进逻辑并仅在您确实希望这样做时定义错误级别(在您的示例中)。

它不可能配置相同的记录器与DEBUG级别(及以上)错误级别(及以上)一起工作。

这实际上是一个功能,而不是缺点,因为它允许在运行的系统上更改LOG4j的行为(无需重新启动),这对于问题跟踪很有用。

当然,您可以将您的记录器写入,以便它们不会允许setLevel,但是,我真的不明白为什么要这么做。

希望,这有助于

+0

** @ Mark Bramnik:** **我的属性文件:** ###日志级别。 ###值{ALARM,ERROR,WARNING,TRACE,PRINT} 1.1.1 =错误
###日志目录1.1.2 =/LOGS/SAM/** Java代码:**枚举记录器= Logger.getRootLogger() .getLoggerRepository()getCurrentLoggers(); //它获取所有记录器
...... Logger temp =(Logger)iter.next(); temp.setLevel(电平); //设置的级别来自属性文件 – VJS 2011-12-27 07:01:43

+0

** log4j.xml:** 我希望包“com.sas”下的代码总是按照log4j.xml中提到的日志级别来发送 \t <优先级值=” DEBUG“/> VJS 2011-12-27 07:04:26

+0

**问题:** 这里通过Java代码....记录器为 ”com.sas“ 也被modified.I希望出现这种情况通过java代码,我不应该设置记录器级别“com.sas”...我如何将此传递给java代码....我不能看到任何API,我可以通过它获取记录器并在log4j中指定。 如果我以这种方式获得log4j.xml中指定的日志记录级别不应该得到改变.....我认为这不可能,因为您提到了...它通过java代码获取覆盖。 ... **任何解决方案... ** – VJS 2011-12-27 07:04:48

0

为什么不直接使用两个附加目的地不同的日志级别,而不是吗?你可以添加levelMax和levelMin PARAMS告诉Log4j提供的附加器只需登录那些水平。

<param name="LevelMax" value="warn" /> 
<param name="LevelMin" value="info" />