0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Log4j2 でカスタムログレベルを使う

Last updated at Posted at 2025-02-09

1行まとめ

Log4j 2 でカスタムログレベルを導入する場合は、 category = Level.CATEGORYPlugin を作るのがオススメです。

背景

Log4j2 には FATAL, ERROR, WARN, INFO, DEBUG, TRACE というレベルが用意されています。
これら以外のカスタムログレベルを使う方法も Log4j2 に用意されており、公式ドキュメントで解説されています。
https://logging.apache.org/log4j/2.x/manual/customloglevels.html

公式ドキュメントの方法でカスタムログレベルを扱うことができるようになるのですが、ちょっと冗長というか、カスタムログレベルの定義を 2 箇所 (Java と log4j2.xml) に記載している点に違和感があります。一方だけで済むのでは? と感じてしまいます。
実際、Java 側の記載だけで済む方法があるのですが、なぜか公式ドキュメントに記載がないため、ここにメモを残します。

解決方法

Java コードでカスタムログレベルを定義します。ポイントは 3 点です。

  • カスタムログレベルを static フィールドに定義したクラスを作ること
  • Log4j 2 の Plugin (org.apache.logging.log4j.core.config.plugins.Plugin) にすること
  • Plugin の categoryLevel.CATEGORY にすること
@Plugin(name = "MyCustomLevel", category = Level.CATEGORY)
public class CustomLevel {
    public static final Level INFO2 = Level.forName("INFO2", 375);
    public static final Level INFO3 = Level.forName("INFO3", 350);
    public static final Level INFO4 = Level.forName("INFO4", 325);
}

log4j2.xml を記載します。
ポイントは CustomLevels の記載を不要にできることです。(公式ドキュメントの記載から CustomLevels をコメントアウトしています)

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
	<Appenders>
		<Console name="CONSOLE">
			<PatternLayout pattern="%d [%t] %p %c - %m%n"/>
		</Console>
	</Appenders>
	<!-- 記載不要
	<CustomLevels>
		<CustomLevel name="INFO2" intLevel="375"/>
		<CustomLevel name="INFO3" intLevel="350"/>
		<CustomLevel name="INFO4" intLevel="325"/>
	</CustomLevels>
	-->
	<Loggers>
		<Logger name="com.example" level="DEBUG"/>
		<Root level="INFO2">
			<AppenderRef ref="CONSOLE" level="WARN"/>
		</Root>
	</Loggers>
</Configuration>

ビルドツールに Gradle を使っている場合は、 dependenciesannotationProcessor を加えます。

dependencies {
  annotationProcessor('org.apache.logging.log4j:log4j-core:2.24.3')
}

(詳しくは https://logging.apache.org/log4j/2.x/manual/plugins.html を参照。Maven 向けの設定も記載されています)

以上により、

  • カスタムログレベルの定義は Java だけで済みます。(log4j2.xml での定義が不要になります)
  • log4j2.xml でカスタムログレベルを使用できます。

仕組みの解説

機会や要望があれば、後で書きます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?