我在Spring Boot应用程序中使用Log4J 2并尝试通过application.properties配置一些基本的日志记录选项。
我在我的控制器类中设置了一个记录器,就像这样。
package guru.springframework.controllers;
- - - -
@Controller
public class IndexController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@RequestMapping("/")
String index(){
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warn message");
logger.error("This is an error message");
return "index";
}
}
在application.properties中,我有以下属性。
logging.level.guru.springframework.controllers=DEBUG
logging.level.org.springframework.web=INFO
logging.file=logs/spring-boot-logging.log
当我启动应用程序时,Spring会在控制台中使用INFO级别记录Spring内部loggigng消息。这可以从 logging.level.org.springframework.web 属性中获得。但是,当调用控制器时,只会记录 info()和更低版本的消息。将 logging.level.guru.springframework.controllers 属性设置为DEBUG后,为什么不记录 debug()方法的消息。如果我将以下内容添加到application.properties。
logging.level.root=ERROR
现在,在Spring启动时没有消息发送到控制台(显然这次已经拾取了错误级别)。同样,控制器仅发出 error()方法消息。那么,是否有从application.properties中获取级别的特定优先级。
有没有办法为不同的包(比如控制器包)设置不同的级别,而不依赖于 logging.level.root 和 logging.level.org指定的级别application.properties中的.springframework.web 。
我不想使用任何其他外部配置文件。
答案 0 :(得分:1)
您正在使用包含a bug的旧版Spring Boot(1.2.4.RELEASE)。它在1.2.6.RELEASE中修复,但我建议升级到1.2.8.RELEASE(如果你需要坚持使用1.2.x),或者更好的是,升级到1.3.3.RELEASE(最新版本)在撰写本文时)。您可以通过更新您在项目中使用的printf("Error is: %s\n", strerror(saved_error));
版本进行升级:
Cremno's answer