无法在log4j2中使用RollingFileAppender写入日志

时间:2019-06-13 08:16:36

标签: java tomcat java-ee servlet-3.0

我正在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

Servlet代码:-

@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(),还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

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

点击here

有两种解释方式,

  1. 将log4j2.xml放在类路径中(命令)
  2. 使用记录的jvm选项运行tomcat

这不是OP的问题,但我希望您能提醒一下。

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

  • 请考虑重新使用ObjectMapper: Jackson-Performancejavadoc