首页 > 解决方案 > 无法在 log4j2 中使用 RollingFileAppender 写入日志

问题描述

我正在 Servlet 3.0 和 Tomcat 中做一个简单的演示项目,
我正在接受来自 Postman 的 JSON 请求并提供 JSON 响应。
现在我也想登录我的项目。

所以我使用了 log4j2
罐子:-
log4j-1.2.12.jar,
jackson-databind-2.6.3.jar,
jackson-core-2.6.3.jar

小服务程序代码:-

@WebServlet("/StatusServlet")
public class TestingServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    Logger logger = Logger.getLogger(TestingServlet.class);

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub


        BasicConfigurator.configure();

        String requestData = request.getReader().lines().collect(Collectors.joining());
        System.out.println(requestData);

        // 2. initiate jackson mapper

            ObjectMapper mapper = new ObjectMapper();

            TestingPojo pojo = mapper.readValue(requestData, TestingPojo.class);

           logger.info("status "+pojo.getStatus());
            PrintWriter out = response.getWriter();
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            mapper.writeValue(out, pojo.getStatus());
            out.flush(); 


    }

我的项目目录:-

Webservice            
   |-src         
      |- com       
          |-test          
             TestingPojo.java               
             TestingServlet.java       
             log4j2.xml

我的 log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Configuration status="TRACE">
    <Properties>
        <Property name="logPath">/tmp</Property>
        <!-- <Property name="patternInfo">%d{dd/MMM/yyyy HH:mm:ss,SSS} %F : %C 
            : %M() : THREAD[%t] : LINE[%L] : [%m]%n</Property> -->
        <Property name="patternInfo">%d{dd/MMM/yyyy HH:mm:ss,SSS} %m%n</Property>
    </Properties>
    <Appenders>
        <RollingFile name="RollingFile" fileName="${logPath}/i-am.log"
            filePattern="${logPath}/webservice-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="${patternInfo}" />
            <Policies>
                <SizeBasedTriggeringPolicy size="10MB" />
                <TimeBasedTriggeringPolicy interval="1"
                    modulate="true" />
            </Policies>
            <!-- <DefaultRolloverStrategy max="10 MB"/> -->
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="root" level="debug" additivity="false">
            <appender-ref ref="RollingFile" level="debug" />
        </Logger>
        <Root level="TRACE" additivity="false">
            <AppenderRef ref="RollingFile" />
        </Root>
    </Loggers>
</Configuration>

当我在 Eclipse 中运行代码时,我会以模式格式在控制台中获取日志。
但是当我在远程服务器中部署代码时,在提到的 Rolling File Appender 路径中没有任何日志。没有文件被创建。

我的配置有什么问题吗?
我也使用了 Basic Configurator.configure() ,还有其他方法吗?

标签: javatomcatjakarta-eeservlet-3.0

解决方案


我为您找到了相同的文章。(您需要更改 log4j2.xml 的目录)

点击这里

有两种解释方式,

  1. 将 log4j2.xml 放在类路径中(推荐)
  2. 使用日志记录 jvm 选项运行 tomcat

这不是OP的问题,但我希望你提醒这一点。

  • 请考虑添加控制台 Appender,它会很高兴在您的 IDE 控制台中看到。

  • 请考虑重用 ObjectMapper : Jackson-Performance , javadoc


推荐阅读