java - 无法使用 log4j2 写入日志

标签 java spring-boot tomcat logging log4j2

我使用 log4j2.xml 的以下配置和 spring boot 来登录 apache tomcat 日志:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="60">
    <Properties>
        <Property name="logdir">${sys:catalina.base}/logs</Property>
        <Property name="layout">%d [%t] %-5p %c- %m%n</Property>
    </Properties>
    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="${layout}"/>
        </Console>
        <RollingFile name="FILEAPPENDER"
                     fileName="${logdir}/doc-reader.log"
                     filePattern="${logdir}/doc-reader.%d{yyyy-MM-dd}.log.gz">
            <PatternLayout pattern="${layout}"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="1 KB" />
            </Policies>
            <DefaultRolloverStrategy max="4"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="FILEAPPENDER"/>
        </Root>
        <Logger name="com.mypackage"
                level="info"
                additivity="false">
            <AppenderRef ref="FILEAPPENDER"/>
        </Logger>
    </Loggers>
</Configuration>

此配置能够在 tomcat 的 logs/文件夹中创建日志和压缩日志。它还会写入系统生成的消息,例如:

2018-12-11 11:16:20,359 [http-nio-8089-exec-1] INFO  org.springframework.web.servlet.DispatcherServlet- Completed initialization in 9 ms

但是当我尝试使用我的 Controller 进行日志记录时,它无法写入日志文件:

package com.mypackage.controller;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * @author abhishekkeshri 07/12/2018
 */

@RestController
public class DevController {

    private static final Logger LOGGER = LogManager.getLogger(DevController.class);

    @RequestMapping(value = "/health")
    public String getCurrentDateTime() {

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        LocalDateTime now = LocalDateTime.now();
        LOGGER.info("Info : number is " + dtf.format(now));
        LOGGER.warn("Warning : number is " + dtf.format(now));
        LOGGER.debug("Debug : number is " + dtf.format(now));
        LOGGER.error("Error : number is " + dtf.format(now));
        LOGGER.fatal("Fatal : number is " + dtf.format(now));
        return(dtf.format(now));
    }

}

我在不同的谷歌搜索中提出了各种解决方案,但无济于事,所以考虑将其作为问题发布。我在这里做错了什么?

我的项目结构是:

doc-reader > src > main > java > com.mypackage > controller > DevController
doc-reader > src > main > java > com.mypackage > startup > DRStartupCacheLoader

最佳答案

如果你使用的是maven或者gradle构建工具,你可以使用依赖:

https://mvnrepository.com/artifact/org.slf4j/slf4j-api

添加后,你可以试试这个吗?

private static final Logger LOGGER = LoggerFactory.getLogger(DevController.class);

关于java - 无法使用 log4j2 写入日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53718201/

相关文章:

java - 单线程执行的性能调优

tomcat - 如何告诉 tomcat 支持静态内容的 CORS?

java - 更新现有 cookie 的域

Java嵌套for循环打印输出

java - 如何忽略公共(public)资源(.js .css 文件)的 Servlet 过滤器

java - 参数作为POST方法的请求参数

javascript - 在java spring中将文件上传到tomcat服务器时访问被拒绝

java - 测量某个数据结构的内存使用情况

java - 在java中验证嵌套字符串

java - 在 Spring Boot 1.5.20.RELEASE 上无法重定向 ErrorViewResolver 内的 View