11

log4j2 を使用していますが、クラス名でフィルタリングする方法がわかりません。RegexFilter を試してみましたが、テキスト メッセージのみをフィルタリングします。古いlog4jでは、タグ「filter」で十分でした

<filter class="aaaa.bbbb.cccc.ClassName">

誰かが今どうすればよいか知っていますか?

前もって感謝します!

アップデート:

わかりました、やった!ロガーを定義し、属性「name」にクラス名を設定する必要があります。

<loggers>
    <logger name="aaaa.bbbb.cccc.ClassName" additivity="false" level="info">
        <appender-ref ref="RollingFile" />
    </logger>
    <root level="error">
        <appender-ref ref="RollingFile" />
    </root>
</loggers>
4

1 に答える 1

11

ロガーの命名規則に従っている場合、これは Log4j で自動的に機能します。コードで、ロガーをクラス名で宣言します。

Logger logger = LogManager.getLogger(MyClass.class);

ロガーには自動的に名前が割り当てられますfully.qualified.class.name.of.MyClass。これで、構成でこの完全修飾名(またはパッケージ名またはパッケージの最初の部分) を使用して、フィルタリングルーティングを行うことができます。


フィルタリング

以下の例は、ロギングを実行するクラスのパッケージに基づいてログ イベントをフィルタリングする方法を示しています。パッケージ内のクラスによるすべてDEBUGおよびTRACEレベルのログ イベントcom.other.companyは無視され、パッケージ内のクラスcom.another.projectのみERRORおよびFATALロギングが含まれます。

<Configuration status="warn">
  <Appenders>
    <File name="MyFile" fileName="logs/my.log">
      <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
    </File>
  </Appenders>
  <Loggers>

    <!-- drops all DEBUG and TRACE logging done by any class in this package -->
    <Logger name="com.other.company" level="INFO" />

    <!-- log only ERROR and FATAL logging by classes in this package -->
    <Logger name="com.another.project" level="ERROR" />

    <!-- by default, all log events are written to MyFile -->
    <Root level="trace">
      <AppenderRef ref="MyFile"/>
    </Root>
  </Loggers>
</Configuration>

ルーティング

以下の例は、ログ記録を行うクラスのパッケージに基づいて、ログ イベントを個別のログ ファイルにルーティングする方法を示していcom.other.companyます。my.logother.log

<Configuration status="warn">
  <Appenders>
    <File name="MyFile" fileName="logs/my.log">
      <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
    </File>
    <File name="OtherFile" fileName="logs/other.log">
      <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
    </File>
  </Appenders>
  <Loggers>
    <!-- all logging from this package and subpackages goes to OtherFile -->
    <!-- Note: set additivity=false or logging will also go to the root logger -->
    <Logger name="com.other.company" additivity="false">
      <AppenderRef ref="OtherFile"/>
    </Logger>
    <Root level="trace">
      <AppenderRef ref="MyFile"/>
    </Root>
  </Loggers>
</Configuration>
于 2017-01-21T12:46:25.563 に答える