繁体   English   中英

log4j定制配置

[英]log4j custom configuration

我遇到以下情况:我们有一个使用标准Apache log4j工具进行记录的应用程序。 它包含两个类(将它们命名为A和B)。

A.java:

package TestLog4j;

import org.apache.log4j.Logger;

public class A {
    private static Logger logger = Logger.getLogger(A.class);

    public static void main(String[] args) {
        logger.info("This is A");
    }
}

B.java:

package TestLog4j;

import org.apache.log4j.Logger;

public class B {
    private static Logger logger = Logger.getLogger(B.class);

    public static void main(String[] args) {
        logger.info("This is B");
    }
}

我的log4j.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">

  <appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${app_log_dir}/${process_name}.log" />
    <param name="maxBackupIndex" value="1" />
    <param name="maxFileSize" value="50MB" />
    <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{DATE}] %5p %c{1} - %m%n" /> </layout>
  </appender>

  <logger name="TestLog4j.B">
    <level value="info"/>
    <appender-ref ref="fileAppender" />
  </logger>

  <root>
    <level value="${log4j_loglevel}"></level>
    <appender-ref ref="fileAppender" />
  </root>

</log4j:configuration>

log4j.properties:

app_log_dir=C:\Work\Java\log4j
log4j_loglevel=INFO

log4j.properties.custom

process_name=custom.log

这两个类都在同一个jar中:TestLog4j.jar

我正在尝试使用以下命令运行两个类:

java -Druntime_dir =。 -Dlog4j.custom.properties = log4j.properties,log4j.properties.custom -cp。; TestLog4j.jar; log4j-1.2.15.jar TestLog4j.B(或A)

A的输出是:

INFO:这是一个

B的输出为:

log4j:ERROR setFile(null,true)调用失败。 java.io.FileNotFoundException:.log(拒绝访问)在org的java.io.FileOutputStream。(未知来源)在java.io.FileOutputStream。(未知方法)在java.io.FileOutputStream.openAppend(本机方法) org.apache.log4j.FileAppender.setFile(FileAppender.java:290)org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java:194)org.apache.log4j.FileAppender.activateOptions(FileAppender.java:164) org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:285)上的.apache.log4j.config.PropertySetter.activate(PropertySetter.java:257)org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator .java:171),位于org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:184),位于org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:502),位于org.apache.log4j。 org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:919)上的xml.DOMConfigurator.parseCategory(DOMConfigurator.java:415) org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:696)上的ache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:790)在org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter。 java:471)在org.apache.log4j.LogManager。(LogManager.java:125)在org.apache.log4j.Logger.getLogger(Logger.java:118)在TestLog4j.B。(B.java:6)

看来log4j无法识别第二类的-Dlog4j.custom.properties。 为什么会这样?

问题已解决。 我添加了对log4j.custom.properties属性的解析,一切正常。

您确定显示信息:这是A吗? 从上面的root的log4j_loglevel = ERROR(其中将包括TestLog4j.A)

由于您将级别指定为ERROR,因此我的理解是它将忽略logger.info(“ This is A”);

因此,有可能甚至找不到log4j.properties。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM