Spring Boot编程日志记录配置

阿克塞尔·方丹

如何在Spring Boot应用程序中以编程方式配置日志记录

使用xml或属性文件不足以满足我的需求。

更新:我想实现以下目标:

@Value("${logging.level.root}")
private String loggingLevelRoot;

@Value("${logging.level.myApp}")
private String loggingLevelMyApp;

@Value("${logging.file}")
private boolean fileAppenderEnabled;

....

setLevel(Logger.ROOT_LOGGER_NAME, Level.toLevel(loggingLevelRoot)));
setLevel("com.myapp", Level.toLevel(loggingLevelMyApp)));
setLevel("org.springframework", Level.WARN);
setLevel("org.apache.coyote", Level.INFO);
setLevel("org.apache.catalina", Level.INFO);
setLevel("org.apache.catalina.startup.DigesterFactory", Level.ERROR);
setLevel("org.apache.catalina.util.LifecycleMBeanBase", Level.ERROR);

Logger logger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
logger.addAppender(createConsoleAppender());
if (fileAppenderEnabled) {
    logger.addAppender(createFileAppender());
}

我在每个环境中所拥有的是:

  • logging.level.root = [INFO,DEBUG,..]
  • logging.level.myApp = [信息,调试,..]
  • logging.file = [true | 假]

没有重复的XML,Groovy和其他我真的不想处理的格式。

归根结底,这实际上是要获得与Spring JavaConfig对bean相同的日志记录灵活性。XML或其他文件格式太静态了,需要太多的重复,并且与应用程序的其余配置集成得不够好。

为什么日志记录的配置与其他任何Bean或服务都不同?这没有道理。

戴夫·瑟

我不确定您是否要禁用日志记录系统的默认XML配置,但是您确实想在完成执行自定义调用幸运的是,这很容易,因为它尽可能早地在的初始化程序链中完成SpringApplication放置代码最简单的地方可能是SpringApplicationInitializer(它也必须实现ApplicationContextInitializer,因此可以将其添加到中SpringApplication)。例如

SpringApplication application = new SpringApplication(MySources.class);
application.addInitializers(new LoggingInitializer());
application.run(args);

如果这样做,将无法将依赖项注入到初始化程序中,但是它将确保在生命周期中尽早调用它。如果您的初始化程序实现了,EnvironmentAware那么您还将Environment在调用之前被传递的实例,从而SpringApplicationInitializer.initialize()可以解析示例中与环境相关的部分,例如

String loggingLevelRoot = environment.getProperty("logging.level.root");

一旦工作,就可以避免对所有应用程序执行相同的操作,可以通过添加一个META-INF/spring.factories包含初始值设定项类将其声明为

org.springframework.context.ApplicationContextInitializer=\
my.pkg.for.LoggingInitializer

如果您确实需要依赖项注入和@Value解决方案,我想您将不得不接受ApplicationContext在配置任何东西之前将完全刷新。如果这是可以接受的折衷方案,建议LoggingInitializer您在您的上下文中添加a并使其实现CommandLineRunner

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何以编程方式设置Spring Boot的日志记录级别?

来自分类Dev

在Spring Boot中禁用自动日志记录配置

来自分类Dev

Spring Boot日志配置

来自分类Dev

Spring Boot日志记录模式

来自分类Dev

Spring Boot 中的日志配置

来自分类Dev

Spring Boot启动时禁用日志记录系统调试(配置转储)

来自分类Dev

Spring Boot启动时禁用日志记录系统调试(配置转储)

来自分类Dev

在Spring Boot(Gradle)中无法记录日志

来自分类Dev

Spring-Boot部署-JBAS011555:无法使用'logging.properties'配置文件配置日志记录

来自分类Dev

Spring Boot 2 和日志配置

来自分类常见问题

在Spring Boot中以编程方式配置DataSource

来自分类Dev

Spring Boot管理员日志历史记录

来自分类Dev

Spring Boot 应用程序中的日志记录模式

来自分类Dev

如何在 Spring Boot 中启用文件日志记录?

来自分类Dev

Spring Boot Jetty / tomcat嵌入式访问日志配置

来自分类Dev

Spring Boot Jetty / tomcat嵌入式访问日志配置

来自分类Dev

具有Web Security编程配置的Spring Boot Web Service

来自分类Dev

具有Web Security编程配置的Spring Boot Web Service

来自分类Dev

加载Spring配置编程

来自分类Dev

Spring Boot日志记录和Google Cloud Platform日志查看器

来自分类Dev

Spring Boot异步编程

来自分类Dev

如何使用自定义记录器在Spring Boot中记录访问日志

来自分类Dev

使用默认的 spring 日志添加日志记录?

来自分类Dev

Spring正在重置我的日志记录配置-我该如何解决?

来自分类Dev

Spring正在重置我的日志记录配置-我该如何解决?

来自分类Dev

Spring Boot yml配置

来自分类Dev

Spring Boot外部配置

来自分类Dev

Spring Boot YAML配置

来自分类Dev

Spring Boot:无法配置

Related 相关文章

热门标签

归档