java - 首次运行项目时未生成 Log4j 日志文件

标签 java jsp log4j

当我在服务器启动后第一次运行我的项目时,未生成 log4j 日志文件,并且我收到 FileNotFoundException。但是在我的项目的第二次运行中,我创建了记录器文件,并且一切都运行完美。这种典型行为的原因可能是什么?

这是我的 log4j.properties 文件,位于默认包中。

# Root logger option
log4j.rootLogger=ALL , stdout, File

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=\u001b[35m%d{dd-MMM-yyyy HH:mm:ss,SSS} [%t] %c %x %-5p %m%n

# Redirect log messages to a log File, support File rolling.
log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.File=${logfile.name}
log4j.appender.File.MaxFileSize=5MB
log4j.appender.File.MaxBackupIndex=10
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d{dd-MMM-yyyy HH:mm:ss,SSS}[%t] %x %c: %-5p - %m%n 

在这里,我使用 System.property 设置带有自定义路径的文件名

<%System.setProperty("logfile.name", getServletContext().getRealPath("/") + "../logs");%>
<%!final static Logger logger = Logger.getLogger("login.jsp");%>
<%logger.info("working");%>

我正在使用log4j-1.2.15.jar, Netbeans 8.2 IDE, Tomcat 8.0服务器

最佳答案

日志文件丢失的问题是由初始化logfile.name属性的方法引起的。

Log4j init 序列在调用 System.setProperty 的 JSP 之前执行,因此它会保留与占位符 ${logfile.name} 相对应的错误值等文件不存在。

当调用 JSP 时,它将系统属性设置为有效的文件名,以便它开始正确运行以供进一步调用。

不应通过 JSP 设置此属性,它必须在其他地方完成,最好不在应用程序的代码部分中。例如,使用部署应用程序的脚本,或者基本上在 log4j.properties 本身中。

关于java - 首次运行项目时未生成 Log4j 日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49485098/

相关文章:

java - 使用 jboss 时包 javax.servlet.annotation 不存在

java - log4j:WARN 在 org.apache.log4j.DailyRollingFileAppender 中没有这样的属性 [maxFileSize]

java - Apache log4j 2.3 从另一个文件获取日志文件路径

java - 使用 JMockit 和 JUnit4 测试 Spring JDBC

java - Eclipse Oxygen 2 + Java 9 几分钟后显示错误

java - 如何在 JGit 中从一个 git 分支硬重置到另一个分支?

java - Struts 标签中的 # 、 % 和 $ 符号有什么区别?

java - spring MVC 中的 404 错误 - "the requested resource not found"用于简单的注册/登录程序

javascript - JSP:发生页面加载事件时正在执行Onclick代码

java - 在 log4j2 中记录 PID 而不使用线程上下文