当我第一次运行我的项目后,服务器启动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服务器
答案 0 :(得分:1)
缺少日志文件的问题是由用于初始化logfile.name
属性的方法引起的。
Log4j init序列在调用System.setProperty
的JSP之前执行,因此它保留了与占位符${logfile.name}
对应的错误值,并且此类文件不存在。
调用JSP时,它会将系统属性设置为有效的文件名,因此它会开始正常运行以进行进一步的调用。
不应该通过JSP设置此属性,它必须在其他地方设置,最好在应用程序的代码部分中 not 。例如,使用部署应用程序的脚本,或基本上在log4j.properties
本身。