2016-08-03 5 views
0

私たちはいくつかの埋め込まれたjarで構成されるプログラムを作っています。各jarには個別のログファイルが必要です。問題は、コアjarファイルにログインしようとすると、ログメッセージが他のjarファイルのログファイルに書き込まれることです。異なるjarのLog4j2の異なるログ

これは、コア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 
} 

ログに記録するログファイルを選択するにはどうすればよいですか?

答えて

1

すべてのあなたのjarファイルは、単一のクラスローダによってロードされているので、Log4jのの一つだけ、そのため一つだけの構成があります。

おそらく、各jarファイルは、別のパッケージからのクラスがあり、そしてあなたは、ロガー名に応じて、異なるアペンダ、ログメッセージを生成するクラスの名前、すなわちにログメッセージを送信することができます。

複数のアペンダーを定義し、ロガーをadditivity="false"で構成し、使用するアペンダーを各基本パッケージごとに指定します。

例:

<?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> 
:あなたはパッケージ com.example.coreとサブパッケージのクラスと core.jar、およびパッケージからのクラスと extension.jar com.example.extとサブパッケージを持っている場合は、このような構成を使用したいです
関連する問題