log4j日志文件未在项目的第一次运行中生成



当我在服务器启动log4j日志文件未能生成的情况下首次运行项目时,我将获得FilenotFoundException。但是在项目的第二运行中,我将创建Logger文件,并且一切运行完美。这种典型行为的原因是什么?

这是我的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 sequence是在调用System.setProperty的JSP之前执行的,因此它使不正确的值与占位符${logfile.name}相对应,并且不存在此类文件。

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

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

最新更新