Spring Bootでアプリを作るとデフォルトではコンソールに色々な情報が出力されます。
Webアプリやcronから実行するバッチ処理なんかでは問題ないですが、ユーザーがコマンドラインから直接実行するようなアプリの場合には邪魔になります。
ここでは起動/終了時のコンソール出力を抑制する方法をまとめます。
デフォルト設定でのコンソール出力
先ずはデフォルトでコンソールに出力される内容を確認するために、次のような簡単なアプリを作成して実行してみます。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
package tag1216.console;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
try (ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args)) {
Application app = ctx.getBean(Application.class);
app.run(args);
} catch (Exception e) {
e.printStackTrace();
}
}
public void run(String... args) throws Exception {
System.out.println("処理開始");
System.out.println("処理終了");
}
}
コンソール出力はこのようになります。
(1)
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.2.5.RELEASE)
(2)
2015-09-05 15:30:34.754 INFO 797 --- [ main] tag1216.console.Application : Starting Application on ***.local with PID 797 (/Users/***/develop/eclipse-jee-4.5/workspace/console-output/target/classes started by *** in /Users/***/develop/eclipse-jee-4.5/workspace/console-output)
(3)
2015-09-05 15:30:34.813 INFO 797 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@292b08d6: startup date [Sat Sep 05 15:30:34 JST 2015]; root of context hierarchy
2015-09-05 15:30:35.484 INFO 797 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
(2)
2015-09-05 15:30:35.499 INFO 797 --- [ main] tag1216.console.Application : Started Application in 1.031 seconds (JVM running for 1.654)
処理開始
処理終了
(3)
2015-09-05 15:30:35.500 INFO 797 --- [ main] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@292b08d6: startup date [Sat Sep 05 15:30:34 JST 2015]; root of context hierarchy
(3)
2015-09-05 15:30:35.503 INFO 797 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown
(1) 最初にSpring Bootのバナーが出力されます。
(2) その後はlogbackを使ったログ出力で、カテゴリがSpringApplicationに渡したクラス名になっている行はstartup information
というもので、マシン名、PID、ディレクトリ情報などが出力さています。
(3) その他にもログレベルINFOでいくつかのログが出力されています。
バナー表示を抑制する
バナーを非表示にするには、設定ファイル(application.ymlまたはapplication.properties)でspring.main.show-banner: false
を指定します。
spring.main.show-banner: false
これはSpringApplicationクラスのメソッドで指定することも可能です。
SpringApplication springApplication = new SpringApplication(Application.class);
springApplication.setShowBanner(false);
startup infomationの出力を抑制する
こちらも設定ファイルかSpringApplicationのメソッドで指定できます。
spring.main.log-startup-info: false
springApplication.setLogStartupInfo(false);
SpringのINFO出力を抑制する
デフォルト設定ではルートカテゴリのログレベルは[INFO]になっているので、設定ファイルでSpringのログ出力レベルを[WARN]に変更します。
logging.level:
org.springframework: WARN
まとめ
まとめると、設定ファイルは以下のようになります。
spring.main:
show-banner: false
log-startup-info: false
logging.level:
org.springframework: WARN
実行結果
処理開始
処理終了