Java Apache Log4j log4j.xml Конфигурация множественная ошибка - PullRequest
0 голосов
/ 19 октября 2019

Я думаю, это можно было спросить раньше. Но у него есть некоторые дополнительные вопросы о том, как использовать собственность. Вот мой 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.ma.dev;

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 голос
/ 19 октября 2019

Похоже, вы пытались смешать конфигурацию 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 в вашем classpath, а затем вы можете использовать его.


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");
   }
}

Подробнее вы можете найти здесь .

0 голосов
/ 19 октября 2019

Вы получаете эти ошибки, потому что вы не включили пространство имен log4j в элемент DOCTYPE. Верх вашего файла должен выглядеть следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    ...

Что касается вашего второго вопроса, я не совсем уверен, возможно ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...