当我在服务器启动后第一次运行我的项目时,未生成 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/