如何在 web.xml 和 log4j.properties 中配置 log4j 输出文件路径?
Posted
技术标签:
【中文标题】如何在 web.xml 和 log4j.properties 中配置 log4j 输出文件路径?【英文标题】:How to configure the log4j output file path in web.xml and log4j.properties? 【发布时间】:2012-10-20 14:52:08 【问题描述】:我开发了一个可以注册员工的网络应用程序。
我的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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Employee Registration</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>sapient</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>sapient</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>
现在,当我在我的 html 页面中单击 Register
按钮时。它转到一个控制器类,我在其中编写了一个日志记录代码,
@org.springframework.stereotype.Controller
public class RegController
private static final Logger LOGGER = Logger
.getLogger(RegController.class.getName());
@RequestMapping(value = "/register.htm", method = RequestMethod.GET)
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception
LOGGER.debug("ENTERING the contoller class");
ModelAndView mav = new ModelAndView("register");
LOGGER.debug("exiting the contoller class");
return mav;
我创建了一个名为 resource
的包并在
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\loging.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%dABSOLUTE %5p %c1:%L - %m%n
但我的日志不是在C:
驱动器中创建的。
我需要在 web.xml 中配置一些东西吗? 我已经包含了 log4j.jar 文件。
【问题讨论】:
参考此链接mkyong.com/spring-mvc/spring-mvc-log4j-integration-example 【参考方案1】:你需要包括-
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/resource/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
在您的 web.xml 中。那么它会正常工作。
【讨论】:
并在 /WEB-INF/resource/ 下添加文件 log4j.properties 与此代码# Root logger option log4j.rootLogger=DEBUG, file # Redirect log messages to a log file log4j.appender.file=org.apache.log4j.RollingFileAppender #outputs to Tomcat home log4j.appender.file.File=$catalina.home/logs/myapp.log log4j.appender.file.MaxFileSize=5MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%dyyyy-MM-dd HH:mm:ss %-5p %c1:%L - %m%n
像魅力一样工作。谢谢【参考方案2】:
您的问题与 Spring MVC 无关。这只是一个 Log4J 配置问题。 (请编辑您的问题)
您是否正确设置了记录器? (例如,允许调试级别,并将您的 file
附加程序设置为记录器)
在你的配置中有这样的东西(我只是凭记忆回忆语法,如果有什么问题自己修复)
log4j.rootLogger.level=INFO, file
log4j.logger.your.package.RegController=DEBUG
类似的东西。
另外,请确保类路径中没有其他 log4j.properties 或 log4j.xml。 Log4J 可能会加载它们而不是您的,这会导致问题。
【讨论】:
一些题外话:我强烈建议 OP 采用 SLF4J。您仍然可以使用 Log4J 作为日志记录的后端,但它简化了配置,并且您将来可以更改您的日志记录后端【参考方案3】:在资源文件夹中包含以下 log4j.properties 文件。
log4j.rootCategory=INFO,S,rollingFile
log4j.appender.S =org.apache.log4j.ConsoleAppender
log4j.appender.S.layout =org.apache.log4j.PatternLayout
log4j.appender.S.layout.ConversionPattern = %dyyyy-MM-dd HH:mm:ss %c1 [%p] %m%n
log4j.appender.rollingFile = org.apache.log4j.DailyRollingFileAppender
#provide path to your location where you want logs created. For now its logs folder of tomcat.
log4j.appender.rollingFile.File = $catalina.home/logs/loging.log
log4j.appender.rollingFile.Append = true
log4j.appender.rollingFile.MaxFileSize=2000KB
log4j.appender.rollingFile.MaxBackupIndex=9
log4j.appender.rollingFile.Threshold = ALL
log4j.appender.rollingFile.DatePattern = '.'yyy-MM-dd
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern = %dyyyy-MM-dd HH:mm:ss %c1 [%p] %m%n
用这个替换你的代码。肯定会正常工作的。
【讨论】:
【参考方案4】:在您的 web.xml 中添加此代码
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/resource/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
并在 /WEB-INF/resource/ 下使用此代码添加文件 log4j.properties
# Root logger option
log4j.rootLogger=DEBUG, file # Redirect log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender #outputs to
Tomcat home log4j.appender.file.File=$catalina.home/logs/myapp.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%dyyyy-MM-dd HH:mm:ss
%-5p %c1:%L - %m%n
并在您的班级中添加此代码
private static final Logger logger = Logger.getLogger(NameOfYourrClass.class);
在你的函数里面添加这段代码
logger.debug("This is Error message", new Exception("Testing"));
【讨论】:
以上是关于如何在 web.xml 和 log4j.properties 中配置 log4j 输出文件路径?的主要内容,如果未能解决你的问题,请参考以下文章
如何设置 web.xml 和 dispatcher-servlet.xml 进行映射?
如何在 Tomcat 的 web.xml 中为欢迎文件映射过滤器?