Как добавить журналы, реализованные с помощью slf4j, в файл журнала, реализованный с помощью log4j - PullRequest
0 голосов
/ 03 мая 2018

Я использовал log4j для входа в приложение Java. Я использую стороннюю библиотеку (jar), которая использует slf4j для своей регистрации. Что мне нужно сделать, чтобы добавить журналы сторонней библиотеки (slf4j) в мой файл журнала и консоль.

Я использую ниже версии log4j maven в моем коде.

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>2.7</version>
</dependency>

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.7</version>
</dependency>

В своем Java-приложении я использовал log4j для регистрации.

Мой код Java

import org.apache.logging.log4j.LogManager;

import org.apache.logging.log4j.Logger;

private static final Logger LOGGER = LogManager.getLogger(Abc.class);

Я использую стороннюю библиотеку, которая использует ведение журнала slf4j.

Код сторонней библиотеки

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

private static final Logger logger = LoggerFactory.getLogger(Xyz.class);

Это мой файл log4j.xml

<Configuration status="INFO">

<CustomLevels> 
   <CustomLevel name="REPORT" intLevel="250" />  <!-- This is custom log level used in my code -->
</CustomLevels>

 <Appenders>

    <Console name='Console' target="SYSTEM_OUT">
        <PatternLayout>
            <ScriptPatternSelector defaultPattern="%d{dd-MMM-yyyy HH:mm:ss} [%t] %-5p: %m%n"><Script name="LevelSelector" language="javascript"><![CDATA[
                        result=null;
                        switch (logEvent.getLevel())
                        {
                            case org.apache.logging.log4j.Level.FATAL:
                            case org.apache.logging.log4j.Level.ERROR:
                            case org.apache.logging.log4j.Level.WARN:
                            case org.apache.logging.log4j.Level.INFO:
                            case org.apache.logging.log4j.Level.DEBUG:
                            case org.apache.logging.log4j.Level.TRACE:
                            result=logEvent.getLevel();
                                  break;
                            default:result=null;                                            
                        }
                        result;
                        ]]></Script>

                    <PatternMatch key="FATAL" pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
                    <PatternMatch key="ERROR" pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
                    <PatternMatch key="WARN" pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
                    <PatternMatch key="INFO" pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
                    <PatternMatch key="DEBUG" pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
                    <PatternMatch key="TRACE" pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
                </ScriptPatternSelector>
        </PatternLayout>
    </Console>
    <File name="TestAutomationLog" fileName="./log/TestAutomationLog.log">
         <PatternLayout>
            <ScriptPatternSelector defaultPattern="%d{dd-MMM-yyyy HH:mm:ss} [%t] %-5p: %m%n">
                    <Script name="LevelSelector" language="javascript"><![CDATA[
                        result=null;
                        switch (logEvent.getLevel())
                        {
                            case org.apache.logging.log4j.Level.FATAL:
                            case org.apache.logging.log4j.Level.ERROR:
                            case org.apache.logging.log4j.Level.WARN:
                            case org.apache.logging.log4j.Level.INFO:
                            case org.apache.logging.log4j.Level.DEBUG:
                            case org.apache.logging.log4j.Level.TRACE:
                            result=logEvent.getLevel();
                                  break;
                            default:result=null;                                            
                        }
                        result;
                        ]]>
                    </Script>
                    <PatternMatch key="FATAL" pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
                    <PatternMatch key="ERROR" pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
                    <PatternMatch key="WARN" pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
                    <PatternMatch key="INFO" pattern="%d{dd-MMM HH:mm:ss.SSS} %logger{0} - %msg%n"/>
                    <PatternMatch key="DEBUG" pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
                    <PatternMatch key="TRACE" pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
                </ScriptPatternSelector>
        </PatternLayout>
    </File>
</Appenders>

<loggers>     
   <root level="report">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="TestAutomationLog"/>
   </root>  
   <logger name="com.myPackage" level="trace" /> 
   <logger name="com.thirdParty.package" level="trace" additivity="true" /><!-- additivity="true" to add into log file -->
</loggers>

</Configuration>

Я хочу добавить журналы пакета "com.thirdParty.package" в мой файл журнала, т. Е. TestAutomationLog.log.

Пожалуйста, предложите необходимые изменения.

В качестве альтернативы , если я могу добавить эти сторонние журналы (slf4j) в другой файл журнала или просмотреть их в той же консоли (где отображаются журналы моего приложения), то это также поможет мне.

Заранее спасибо.

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