我创建了一个java应用程序,用于将日志记录在一个名为 LogDemo.log 的单独文件中,该应用程序工作正常,但我没有在 LogDemo.log <下保存任何日志/ strong>文件。
任何人都可以告诉我一些解决方案吗
我的代码如下:
Log4jInit.java
package com.mypackage;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.Logger;
public class Log4jInit extends HttpServlet
{
private static final long serialVersionUID = 1L;
public void init() {
Logger log = Logger.getLogger("LogDemologger");
log.debug("Show DEBUG message");
log.info("Show INFO message");
log.warn("Show WARN message");
log.error("Show ERROR message");
log.fatal("Show FATAL message");
}
}
ApplicationServletContextListener.java
package com.mypackage;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.log4j.PropertyConfigurator;
public class ApplicationServletContextListener implements ServletContextListener
{
public void contextInitialized(ServletContextEvent event)
{
ServletContext ctx = event.getServletContext();
System.setProperty("appRootPath", ctx.getRealPath("/"));
String prefix = ctx.getRealPath("/");
String file = "WEB-INF" + System.getProperty("file.separator")+ "classes" + System.getProperty("file.separator")+ "log4j.properties";
if (file != null)
{
PropertyConfigurator.configure(prefix + file);
System.out.println("Log4J Logging started for application: "+ prefix + file);
}
else
{
System.out.println("Log4J Is not configured for application Application: "+ prefix + file);
}
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
}
log4j.properties
log4j.logger.LogDemologger=DEBUG, C, fileappender
log4j.additivity.LogDemologger=false
log4j.appender.C=org.apache.log4j.ConsoleAppender
log4j.appender.C.layout=org.apache.log4j.PatternLayout
#basic pattern
log4j.appender.C.layout.ConversionPattern=[%c] [%d{dd MMM yyyy - hh:mm:ss}] %5p - %m %n
#advanced pattern (slow)
#log4j.appender.C.layout.ConversionPattern=[%c] [%d{dd MMM yyyy - hh:mm:ss}] %5p - %m - in %M() at line %L of class %C %n
log4j.appender.fileappender=org.apache.log4j.RollingFileAppender
log4j.appender.fileappender.File=${appRootPath}WEB-INF/logs/LogDemo.log
log4j.appender.fileappender.MaxFileSize=500KB
## Keep one backup file
log4j.appender.fileappender.MaxBackupIndex=3
log4j.appender.fileappender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileappender.layout.ConversionPattern=%p %t %c - %m%n
#log4j.appender.C.layout.ConversionPattern=[%c] [%d{dd MMM yyyy - hh:mm:ss}] %5p - %m %n
的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>LogDemo</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>com.mypackage.Log4jInit</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<listener>
<listener-class>
com.mypackage.ApplicationServletContextListener
</listener-class>
</listener>
</web-app>
控制台输出( click to view )
答案 0 :(得分:0)
您可以在监听器中获取log4j配置文件的真实路径,如下所示:
public void contextInitialized(ServletContextEvent event) {
ServletContext ctx = event.getServletContext();
System.setProperty("log4j.debug", "");
System.setProperty("appRootPath", ctx.getRealPath("/"));
String configFilename = ctx.getRealPath("/WEB-INF/classes/log4j.properties");
PropertyConfigurator.configure(configFilename);
System.out.println("Log4J Logging started for application: "+ configFilename);
}
第System.setProperty("log4j.debug", "");
行是可选的。它显示了log4j的活动。
您可能还需要在 log4j.properties
中添加斜杠日志文件路径:
log4j.appender.fileappender.File=${appRootPath}/WEB-INF/logs/LogDemo.log