java - 无法在 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() ,还有其他方法吗?
解决方案
我为您找到了相同的文章。(您需要更改 log4j2.xml 的目录)
点击这里!
有两种解释方式,
- 将 log4j2.xml 放在类路径中(推荐)
- 使用日志记录 jvm 选项运行 tomcat
这不是OP的问题,但我希望你提醒这一点。
请考虑添加控制台 Appender,它会很高兴在您的 IDE 控制台中看到。
请考虑重用 ObjectMapper : Jackson-Performance , javadoc
推荐阅读
- javascript - 在 v5 中扩展 d3.selection——这是正确的做法吗?
- ruby-on-rails - Rails 如何以一种形式保存来自不同模型(国家、州、城市、地址)的地址?
- java - Springboot 应用程序 @EnableConfigServer 在 Eclipse 中无法解析
- java - 无法打开生成的pdf
- git - 如何通过“git svn”签出一些目录?
- php - 程序无法启动,因为您的计算机中缺少 php7.dll
- c++ - 结构和类的不同 sizeof() 彼此具有相同的字段类型
- android - Kotlin - 类型不匹配:必需:找到上下文:上下文?
- wordpress - 在 wordpress 后端添加额外的字段类型
- javascript - Javascript过滤器未返回预期的int值