有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

配置javaapachelog4jlog4j。xml配置多个错误

我想以前可能有人问过。但它还有一些关于如何使用该房产的额外问题。这是我的log4j。xml.:-

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
   <Properties>
      <Property name="myinfo">INFO</Property>
      <Property name="mywarn" value="WARN"/>
  </Properties>

<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <param name="threshold" value="info" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level Line: %L  - %msg%n" />
    </layout>
</appender>


<appender name="LOGFILE" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="c:/temp/logfile.log" />
    <param name="Append" value="true" />
    <param name="MaxFileSize" value="2MB" />
    <param name="MaxBackupIndex" value="2" />
    <priority value="WARN" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level Line: %L  - %msg%n" />
    </layout>
</appender>


<appender name="UNMAPFILE" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="c:/temp/unmapped.log" />
    <param name="Append" value="true" />
    <param name="MaxFileSize" value="2MB" />
    <param name="MaxBackupIndex" value="2" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
               value="%d [%t] %-5p %c - %m%n" />
    </layout>
</appender>


<category name="com.ma.dev" additivity="false">
    <priority value="INFO" />  <!-- <priority value="${myinfo}" /> --> 
    <appender-ref ref="STDOUT" />
    <appender-ref ref="LOGFILE" />
</category>


<root>
    <priority value="WARN" />
    <appender-ref ref="UNMAPFILE" />
</root>

  </Configuration>

以下是我的Java代码:-

包com。文科硕士德夫

import org.apache.log4j.Logger;

public class App 
{
    public static Logger logger = Logger.getLogger(App.class.getName());
    public static void main( String[] args )
    {
        logger.info("test");
        System.out.println( "Hello World!" );
        logger.warn("Dummy warning");
    }
}

我收到以下错误/警告:-

log4j:WARN Continuable parsing error 2 and column 16
log4j:WARN Document root element "Configuration", must match DOCTYPE root "null".
log4j:WARN Continuable parsing error 2 and column 16
log4j:WARN Document is invalid: no grammar found.
log4j:ERROR DOM element is - not a <log4j:configuration> element.
log4j:WARN No appenders could be found for logger (com.ma.dev.App).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Hello World!

Process finished with exit code 0

在log4j中。xml文件我有以下属性:-

<Properties>
     <Property name="myinfo">INFO</Property>
     <Property name="mywarn" value="WARN"/>
</Properties>

我想使用此属性将优先级更改为:-

 <priority value="${myinfo}" />

可能吗


共 (2) 个答案

  1. # 1 楼答案

    之所以会出现这些错误,是因为在DOCTYPE元素中没有包含log4j名称空间。文件顶部应如下所示:

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

    至于你的第二个问题,我不太确定这是否可能

  2. # 2 楼答案

    看起来你试图混用Log4j 1。x和2。x配置

    如果你想使用Log4j 2。x、 您应该创建log4j2。类路径中的xml。 简单的例子是:

        <?xml version="1.0" encoding="UTF-8"?>
        <Configuration status="WARN">
           <Properties>
             <Property name="priorityLevel">warn</Property>
           </Properties>
           <Appenders>
              <Console name="myConsole" target="SYSTEM_OUT">
                 <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
              </Console>
           </Appenders>
           <Loggers>
              <Root level="${priorityLevel}">
                 <AppenderRef ref="myConsole"/>
              </Root>
           </Loggers>
        </Configuration> 
    

    此外,还应该有log4j-api-2.12.1。jar和log4j-core-2.12.1。jar存储在类路径中,然后就可以使用它了

    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    public class App
    {
       private static final Logger logger = LogManager.getLogger(App.class.getName());
    
       public static void main(String[] args)
       {
          logger.info("test");
          System.out.println( "Hello World!" );
          logger.warn("Dummy warning");
       }
    }
    
    

    更多详细信息,请参见here