Spring引导服务全局错误处理程序,全局排除log4j

时间:2016-06-03 07:51:12

标签: java spring maven logging spring-boot

我在基于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.

0 个答案:

没有答案