1. 概要

通常、コンソールログは、簡単で直感的な方法でシステムをデバッグする機会を提供します。 それでも、システムでこの機能を有効にしたくない場合があります。

このクイックチュートリアルでは、 Spring Bootアプリケーションを実行しているときに、コンソールへのログ記録を回避する方法を説明します。

Logback、Log4js2、またはJava Util Loggingフレームワークを使用しているかどうかにかかわらず、これを実現する方法を示すわかりやすい例を使用して、簡単に説明します。

Spring Bootのロギングフレームワークの詳細については、 Logging in SpringBootチュートリアルを参照することをお勧めします。

2. ログバックのコンソール出力を無効にする方法

プロジェクトでSpringBoot starters を使用している場合は、spring-boot-starter-logging依存関係も含まれます。

この特定のスターターは、 Logback をデフォルトのフレームワークとして構成し、最初はデフォルトでコンソールにのみログを記録します。

この構成は次のようになります logback-spring.xmlファイルをリソースに追加してカスタマイズしました。

たとえば、コンソール出力を無効にしてファイルにのみログを記録するようにXMLを設定しましょう。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource=
      "org/springframework/boot/logging/logback/defaults.xml" />
    <include resource=
      "org/springframework/boot/logging/logback/file-appender.xml" />
    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>

さらに、application.propertiesファイルにlogging.file構成プロパティが必要です。

logging.file=baeldung-disabled-console.log

注:ここで実際にコンソール出力を無効にしているのは、XMLファイルにconsole-appender.xmlが含まれていないため、構成タグもそのトリックを行います。

または、 デフォルト構成をアプリケーションプロパティでオーバーライドすることにより、XMLファイルの作成を回避できます。

たとえば、logging.pattern.consoleプロパティを利用できる可能性があります。

logging.pattern.console=

このプロパティはCONSOLE_LOG_PATTERNシステムプロパティに変換され、Springのデフォルトのコンソール構成で使用されます。

もちろん、このアプローチは以前のアプローチほどクリーンで堅実ではありません。 これはプロパティの意図された目的ではないため、この「ハック」はある時点でLogbackによってサポートされない可能性があります。

さらに、ルートロガーレベルの値を OFF に設定することで、すべてのログアクティビティを無効にできます。

logging.level.root=OFF

3. Log4j2を使用してコンソールにログインしないようにする方法

ご存知かもしれませんが、 Log4j2 は、XML、JSON、YAML、またはプロパティ形式をサポートして、ログの動作を構成します。

わかりやすくするために、今回はlog4j2.xmlファイルの簡単な例を示します。

他の形式は同じ構成構造を尊重します。

<Configuration status="INFO">
    <Appenders>
        <File name="MyFile" fileName="baeldung.log"
          immediateFlush="true" append="false">
        <PatternLayout pattern=
          "%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="MyFile"/>
        </Root>
    </Loggers>
</Configuration>

ログバックの設定と同様に、フレームワークがコンソールへのログ記録を回避する理由は、構成自体ではなく、ルートロガーにコンソールアペンダーへの参照が含まれていないという事実です。

4. JavaUtilロギングのコンソールロギングを無効にする方法

Java Util Logging(または単に「JUL」)は、最近のSpring Bootアプリケーションで最も一般的なロギングソリューションではない可能性があります。

とにかく、フレームワークがプロジェクトに存在する場合に、コンソールログを取り除く方法を分析します。

リソースフォルダのデフォルトのlogging.propertiesに次の値を追加するだけです。

handlers=java.util.logging.FileHandler
java.util.logging.FileHandler.pattern=baeldung.log
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter

そして、logging.fileプロパティをapplication.propertiesファイルに含めます。 どの値でもうまくいきます:

logging.file=true

5. 結論

これらの短い例を使用すると、使用しているログフレームワークに関係なく、アプリケーションのコンソールログを手間のかからない方法で無効にできます。

いつものように、Githubで例の実装を見つけることができます。