Log4j2 различни регистрационни файлове за различни буркани

Ние правим програма, която се състои от няколко вградени буркана. Всеки буркан изисква индивидуален лог файл. Проблемът е, че когато се опитваме да влезем в основния jar файл, лог съобщенията се записват в лог файловете на другите буркани.

Това е кодът на основния jar файл.

static Logger logCore = LogManager.getLogger(); //log file created 
public static void main(String[] args) 
{
    LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
    org.apache.logging.log4j.core.selector.BasicContextSelector
    File file = new File("/home/pi/NetBeansProjects/CoreService/dist/log4j2.xml");
    context.setConfigLocation(file.toURI());

    logCore.info("Core Service initiated"); //Log here is done in the lof od the Core jar as expected 
    //Run methods of another jar (DBcontrollers)
    try
    {
        SmartBoxSN = DBControllers.DeviceSetupController.GetOwnDeviceSetupFieldNameID(3).Value;
    }
    catch(SQLException | ClassNotFoundException ex)
    {

    }
    logCore.info("Core Service initiated"); //Log here is wrongly done in the log file of DBControllers
}

Как можем да изберем лог файла, в който искаме да влезем?


person Santiago Molina    schedule 03.08.2016    source източник


Отговори (1)


Всички ваши буркани се зареждат от един ClassLoader, така че има само един екземпляр на Log4j и следователно само една конфигурация.

Предполага се, че всеки jar файл има класове от различни пакети и можете да изпращате регистрационни съобщения до различни добавки в зависимост от името на регистратора, т.е. името на класа, генериращ лог съобщението.

И така, дефинирайте множество добавки и след това конфигурирайте регистраторите с additivity="false" и посочете приложението за използване за всеки основен пакет.

Пример: Ако имате core.jar с класове от пакет com.example.core и подпакети и extension.jar с класове от пакет com.example.ext и подпакети, бихте използвали конфигурация като тази:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <File name="MainFile" fileName="main.log">
      . . .
    </File>
    <File name="CoreFile" fileName="core.log">
      . . .
    </File>
    <File name="ExtFile" fileName="ext.log">
      . . .
    </File>
  </Appenders>
  <Loggers>
    <Logger name="com.example.core" level="info" additivity="false">
      <AppenderRef ref="CoreFile"/>
    </Logger>
    <Logger name="com.example.ext" level="info" additivity="false">
      <AppenderRef ref="ExtFile"/>
    </Logger>
    <Root level="info">
      <AppenderRef ref="MainFile"/>
    </Root>
  </Loggers>
</Configuration>
person Andreas    schedule 03.08.2016