web-dev-qa-db-ja.com

log4j2 xml構成-ファイルおよびコンソールへのログ(異なるレベルで)

私は2つのことをしたいです:

  1. 特定のログレベルでコンソールにログインする
  2. 別のログレベルでファイルに記録する

コンソールロギングは正常に機能しているように見えますが、ログファイルは空のままです。

これは私のlog4j2.xmlです

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>

    <File name="MyFile" fileName="logs/app.log" immediateFlush="true">
        <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>  

  </appenders>
  <loggers>

    <logger name="filelogger" level="error">
        <appender-ref ref="MyFile"/>
    </logger>

    <root level="info">
      <appender-ref ref="Console"/>
    </root>
  </loggers>
</configuration>

何が悪いのでしょうか?

36
daker

私はそれを考え出した! <Logger>タグはこの場合は使用しないでください。詳細については、Gaurang Patelの回答を参照してください。

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>

    <File name="MyFile" fileName="logs/app.log">
        <PatternLayout pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>             
  </appenders>

  <loggers>     
    <root level="debug">
      <appender-ref ref="Console" level="info"/>
      <appender-ref ref="MyFile" level="error"/>
    </root>    
  </loggers>
</configuration>
58
daker

Dakerは修正された構成ファイルを入れましたが、説明しませんでした。ここに説明を加えたいと思います。 Log4j2 Documentation here に引用されているように、特定の要件では<Logger>タグの使用は必要ありませんでした。さらにいつ<Logger>タグを使用する必要がありますか?以下の説明をドキュメントから読んでください。

おそらく、com.foo.Bar以外のすべてからTRACE出力をすべて削除することが望まれます。ログレベルを変更するだけでは、タスクは完了しません。代わりに、解決策は新しいロガー定義を構成に追加することです。

<Loggers>
  <Logger name="com.foo.Bar" level="TRACE"/> 
  <Root level="ERROR">  
    <AppenderRef ref="STDOUT"> 
  </Root>
  ...
</Loggers>
17
Gaurang Patel

<logger name="filelogger" level="error" >
これが問題になるはずです。ロガーの名前は通常、パッケージ名です(特にfileloggerという名前を付けていない場合)。
試して_<logger name="com.yourpackage" level="error" additivity="true">

参照 Log4j2 Doc

5
basiljames

私が使う <ThresholdFilter />および<AppenderRef level=""> これをする

  • コンソール:すべて出力
  • app.log:> =情報、エラーを除く
  • error.log:> =エラー

[〜#〜] see [〜#〜]

  • <ThresholdFilter level = "error" onMatch = "DENY" onMismatch = "ACCEPT" />

  • <AppenderRef ref = "fileLogger" level = "info" />

<?xml version="1.0" encoding="UTF-8"?>      
<Configuration status="error" monitorInterval="5"> <!-- status:error mean ONLY show log4j kernel's error log in console-->
    <Properties>
        <Property name="APP_LOG_ROOT">Your log's path</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
        </Console>
        <RollingFile name="fileLogger" fileName="${APP_LOG_ROOT}/app.log" filePattern="${APP_LOG_ROOT}/app-%d{yyyy-MM-dd}.log">
            <!-- Except Error -->
            <ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT"/>
            <PatternLayout>
                <pattern>%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %level %logger{36} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingFile>
        <RollingFile name="errorLogger" fileName="${APP_LOG_ROOT}/error.log" filePattern="${APP_LOG_ROOT}/error-%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <pattern>%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %level %logger{36} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="trace" >
            <AppenderRef ref="Console" level="trace" />
            <AppenderRef ref="fileLogger" level="info" />
            <AppenderRef ref="errorLogger" level="error" />
        </Root>
    </Loggers>
</Configuration>
0
周宏成