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

标签 java tomcat jakarta-ee servlet-3.0

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

所以我使用了 log4j2
使用的 jar :-
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() ,还有其他方法吗?

最佳答案

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

点击here !

有两种解释方式,

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

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

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

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

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

相关文章:

java - 如何为内部包含 "this"的方法编写Junit测试

java - 在哪里可以找到 com.mathworks.jmi 包

java - 在java中运行.app/.exe文件

jakarta-ee - 如何在 Wildfly 8.2 中进行从 http 到 https 的 301 重定向?

java - Spring Boot中方法调用的标准输出重定向的另一种方式

maven - 如何使用 NetBeans 将对 Maven Web 应用程序资源 (WAR) 项目的额外依赖项添加到 Maven 存储库?

Tomcat 9 http/2 网络套接字

tomcat - liferay 6.2 与双因素身份验证集成

Java EE @Resource 未映射到 web.xml

java - 在 JSF 2.0 中使用自定义 java 注释进行托管 Bean 方法授权