日志未保存在我的自定义日志文件中

时间:2015-01-21 15:24:26

标签: java logging log4j

我创建了一个java应用程序,用于将日志记录在一个名为 LogDemo.log 的单独文件中,该应用程序工作正常,但我没有在 LogDemo.log <下保存任何日志/ strong>文件。

任何人都可以告诉我一些解决方案吗

我的代码如下:

enter image description here

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 enter image description here

1 个答案:

答案 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