找不到Log4j日志文件

时间:2012-04-01 20:20:47

标签: jsp servlets log4j

我想在我的jsp和servlet中使用log4j。我读过apache docs和this blog。我试过这个博客的第二种方法。这是我的属性文件

log4j.logger.myapplogger=DEBUG, C, fileappender
 
log4j.additivity.myapplogger=true
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/app_log.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

这是我的servlet Listener

public class ApplicationServletContextListener implements ServletContextListener{

    public void contextInitialized(ServletContextEvent e) {

        ServletContext ctx=e.getServletContext();
      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);
}  

控制台显示“Log4J Logging为应用程序启动...”。

这是我尝试测试的servlet。

private Logger log = Logger.getLogger("myapplogger");
 log.error("this is a testign error");  

控制台显示log.But仍然没有在WEB-INF / logs /下创建任何日志文件。请告诉我在哪里检查以及如何纠正。

1 个答案:

答案 0 :(得分:1)

因为

在append的File属性中有变量${appRootPath}。它尚未设置,因此为空。

由于它是空的,它最终会在您的主目录中创建WEB-INF/logs目录,而不是tomcat webapps/

在contextInitialized()

中定义属性
System.setProperty("appRootPath", context.getRealPath("/"));

重新启动servlet容器。