我在基于spring-boot的服务中设置日志记录时出现问题。
根据{{3}},我在pom.xml
中有以下依赖关系:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
.......
<!-- global exclude -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
所以我希望使用spring-boot-starter-logging
提供的日志记录,并排除log4j上的其他传递依赖项。
我创建了一个使用org.apache.log4j.Logger
的全局错误处理程序,因为在本地计算机上出现异常,我看到了堆栈跟踪,但在开发服务器上,这并没有发生。下面是我的错误处理程序:
@ControllerAdvice
public class GlobalErrorHandler {
private static final Logger LOGGER = Logger.getLogger(GlobalErrorHandler.class);
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(Exception.class)
public void onError(HttpServletRequest req, Exception ex) {
String params = req.getParameterMap().entrySet().stream().map(e -> e.getKey()+ "=" + Arrays.toString(e.getValue())).collect(joining(";"));
LOGGER.error("Error on path: " + req.getRequestURI() + ", with parameters: " + params, ex);
}
}
据我所知,spring-boot-logging有diff日志记录依赖项,如果我在全局错误处理程序中使用排除的log4j,它应该使用例如slf4j适配器,所以我不需要修改现有的代码库。
请您澄清一下吗?
编辑: 同样在开发服务器上我从log4j得到奇怪的输出,它表示对于我的一个依赖项中的某些类没有找到appender:
log4j:WARN No appenders could be found for logger (com.company.dependency.SomeClass).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.