我的应用程序以两种方式使用日志记录.... 1)programatic 2)log4j.xml 我必须创建两个日志文件(1个使用programatic和其他使用log4j.xml)。
程序化方式(还有一个属性文件,其中所有的东西都被提及,如日志级别和所有....让我们说...这个...文件正在创建..name as“SAS_VP.log”):
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的日志级别。在log4j.xml中设置了“调试”级别并以编程方式设置了级别为“ ERROR ”,然后由 log4j.xml 创建的文件(SAM_VJ.log)仅包含ERROR级别日志。
如何解决这个问题...我想要...我的日志记录(programmatic和log4j)应该是独立的。
log4j中有什么内容...如果我已经设置了包“com.sas”的日志级别是“Debug”那么没有人可以修改它......类似于mutable类型
<logger name="com.sam">
<priority value="DEBUG"/>
</logger>
寻找你的建议......
答案 0 :(得分:0)
我不确定你是否真的应该要求这样的功能。 您正在谈论配置log4j框架的方法,是的,它支持3种不同的配置方式:
对我来说,编程配置允许更改log4j记录器/追加器的配置状态。
应在系统启动期间加载您的xml配置,然后应用覆盖配置的Java代码。
如果您有使用Java提供配置的逻辑,那么为什么不改进逻辑并定义错误级别(仅从您的示例中),只有您真的希望这样做。
无法配置相同的记录器以使用DEBUG级别(及以上) AND ERROR级别(及以上)。
这实际上是一个功能,而不是缺点,因为它允许在正在运行的系统上更改LOG4j的行为(无需重启),这对问题跟踪很有用。
当然你可以WRAP你的记录器,这样他们就不会允许setLevel,但是,我真的不明白为什么你会这样做。
希望,这有帮助
答案 1 :(得分:0)
为什么不使用具有不同日志级别的两个appender呢?你可以添加levelMax和levelMin参数来告诉log4j appender只记录那些级别。
<param name="LevelMax" value="warn" />
<param name="LevelMin" value="info" />