抑制Spring Boot启动/结束时的控制台输出

使用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

最初会输出Spring Boot的横幅标识。
之后,使用logback进行日志输出,传递给SpringApplication的类名将成为启动信息,包括机器名、PID、目录信息等进行输出。
还有其他一些以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);

抑制启动信息的输出

这个也可以通过配置文件或者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

执行结果

処理開始
処理終了
广告
将在 10 秒后关闭
bannerAds