web项目中Log4j不输出到文件有关问题
web项目中Log4j不输出到文件问题
问题出在
log4j.properties文件放在classpath文件夹下(即web项目的WEB-INF/classes文件夹下,
这样可以保证log4j能够自动识别配置文件,而不用显式的配置)内容如下:
- log4j.rootLogger=warn, stdout,file
- ### direct log messages to stdout ###
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.Target=System.out
- #log4j.appender.stdout.Target=System.err
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- #log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
- log4j.appender.stdout.layout.ConversionPattern=%5p [%t] %c{1}:%L - %m%n
- ### direct messages to file file.log ###
- #log4j.appender.file=org.apache.log4j.FileAppender
- log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
- log4j.appender.file.DatePattern=yyyyMMdd
- log4j.appender.file.File=../logs.log
- log4j.appender.file.layout=org.apache.log4j.PatternLayout
- log4j.appender.file.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %5p %c{1}:%L - %m%n
问题描述:在控制台程序下可以输出到控制台和logs.log文件当中,但是在web项目当中做的log输出只能输出到控制台,而无法输出到logs.log文件当中。
控制台程序如下:
- public class TestLogger {
- public static Log log = LogFactory.getLog(TestLogger.class);
- public static void main(String[] args) {
- log.error("怎么回事?");
- }
- @Test
- public void test() {
- log.error("怎么回事?");
- }
- }
以上程序可以输出到控制台和logs.log文件当中。但是如下程序:
- public class TestLogs extends HttpServlet {
- private static final long serialVersionUID = 1L;
- private static Log log = LogFactory.getLog(TestLogs.class);
- /**
- * @see HttpServlet#HttpServlet()
- */
- public TestLogs() {
- // TODO Auto-generated constructor stub
- }
- @Override
- public void init() throws ServletException {
- log.error("怎么回事?");
- }
- }
输出只能输出到控制台,而无法输出到logs.log文件当中。
问题出在
log4j.appender.file.File=../logs.log
这个配置之上。应更改为:
log4j.appender.file.File=d:/logs.log
即要指定绝对路径而不能指定相对路径!问题解决!
配置成相对路径时,在eclipse 工程跟目录下能生成相应的日志文件,但是web服务器启动时不会记录到根目录下的日志文件,因为web服务器找不到。
纠结好久的问题!!。