Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。如题,想把不同级别的日志信息输出到不同的文件:
eg:
debug_log.log
info_log.log
warn_log.log
error_log.log
fatal_log.log
网上看了有人说这样可以解决:
log4j.rootLogger=INFO,stdout,rolling
log4j.logger.com.woogo=INFO,A1
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %r [%t] %5p [%F:%L] - %m%nlog4j.appender.rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling.layout.ConversionPattern=%d %r [%t] %5p [%F:%L] - %m%n
log4j.appender.rolling=org.apache.log4j.RollingFileAppender
log4j.appender.rolling.File=c:\woogo.log
#log4j.appender.rolling.File=/usr/local/jakarta-tomcat-5.0.25/logs/woogo.log
log4j.appender.rolling.MaxFileSize=5120KB
log4j.appender.rolling.MaxBackupIndex=10log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.File=c:\mylog1.log
log4j.appender.A1.MaxFileSize=500KB
log4j.appender.A1.MaxBackupIndex=50
log4j.appender.A1.Append=true
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ISO8601} - [%p] [%C{1}] - %m%n试了试,不太理解。特别是实际应用时要怎么用。
有人对log4j.logger.com.woogo的用法给出过这样的解释:
可以指定特定包的输出级别,仅限于此包:
使用属性:log4j.logger.包名 = 级别试了试,确实可以达以不同包有特定的输出级别,(可这样是把不同包记下来的日志输出到不同文件了呀)
注:以上测试时都是以实例进行命名的(LogFactory.getLog()方法的参数使用的是当前类的class,这是目前被普通认为的最好的方式。)
从上面两种用法上产生了一些困惑:
1. log4j.logger.com.woogo 倒底应该怎么理解。
2. 相对第一种方法,对第二种方法更理解一些。
可这样做,为不同包指定了不同级别,也指定了输出到的文件。
(只是把不同包日志输出到不同文件记录了呀。并没有起到想要的效果呀。)
(想要不得效果是:不是按包分,是按级别分。)
3. 测试时这样写的LogFactory.getLog("A1")。
在其实包内按上面的写法也可以享受上面com.woogo 这个包所定义的日志级别.
我这样理解的:因为调用了LogFactory.getLog("A1"),所以不管是在哪个包都会按这种A1定义的级别输出日志。
可感觉实际应用时一定不是这样写的,,, 4. 抛开上面的问题。给我个解决办法也成。(实现不同级别日志输出到不同文件)
小弟以前没怎么写过日志,,不知道在实际应用中倒底是怎么样的。。可以问的也有些迷惑。。请大家见量。
eg:
debug_log.log
info_log.log
warn_log.log
error_log.log
fatal_log.log
网上看了有人说这样可以解决:
log4j.rootLogger=INFO,stdout,rolling
log4j.logger.com.woogo=INFO,A1
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %r [%t] %5p [%F:%L] - %m%nlog4j.appender.rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling.layout.ConversionPattern=%d %r [%t] %5p [%F:%L] - %m%n
log4j.appender.rolling=org.apache.log4j.RollingFileAppender
log4j.appender.rolling.File=c:\woogo.log
#log4j.appender.rolling.File=/usr/local/jakarta-tomcat-5.0.25/logs/woogo.log
log4j.appender.rolling.MaxFileSize=5120KB
log4j.appender.rolling.MaxBackupIndex=10log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.File=c:\mylog1.log
log4j.appender.A1.MaxFileSize=500KB
log4j.appender.A1.MaxBackupIndex=50
log4j.appender.A1.Append=true
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ISO8601} - [%p] [%C{1}] - %m%n试了试,不太理解。特别是实际应用时要怎么用。
有人对log4j.logger.com.woogo的用法给出过这样的解释:
可以指定特定包的输出级别,仅限于此包:
使用属性:log4j.logger.包名 = 级别试了试,确实可以达以不同包有特定的输出级别,(可这样是把不同包记下来的日志输出到不同文件了呀)
注:以上测试时都是以实例进行命名的(LogFactory.getLog()方法的参数使用的是当前类的class,这是目前被普通认为的最好的方式。)
从上面两种用法上产生了一些困惑:
1. log4j.logger.com.woogo 倒底应该怎么理解。
2. 相对第一种方法,对第二种方法更理解一些。
可这样做,为不同包指定了不同级别,也指定了输出到的文件。
(只是把不同包日志输出到不同文件记录了呀。并没有起到想要的效果呀。)
(想要不得效果是:不是按包分,是按级别分。)
3. 测试时这样写的LogFactory.getLog("A1")。
在其实包内按上面的写法也可以享受上面com.woogo 这个包所定义的日志级别.
我这样理解的:因为调用了LogFactory.getLog("A1"),所以不管是在哪个包都会按这种A1定义的级别输出日志。
可感觉实际应用时一定不是这样写的,,, 4. 抛开上面的问题。给我个解决办法也成。(实现不同级别日志输出到不同文件)
小弟以前没怎么写过日志,,不知道在实际应用中倒底是怎么样的。。可以问的也有些迷惑。。请大家见量。
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout"/>
</appender>
<appender name="DEBUG" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="debug.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout"/>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="DEBUG" />
<param name="LevelMin" value="DEBUG" />
</filter>
</appender>
<appender name="INFO" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="info.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout"/>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="INFO" />
<param name="LevelMin" value="INFO" />
</filter>
</appender>
<root>
<appender-ref ref="STDOUT"/>
<appender-ref ref="DEBUG"/>
<appender-ref ref="INFO"/>
</root>
</log4j:configuration>
这里做是的什么工作呀,,,,能说的详细一些吗,,,,
然后在你应用启动时调用DOMConfigurator.config来配置log4j 指的是什么,,,能说详细一些吗,,,,网上看到有这样写的,,
在web.xml里加入
<servlet>
<servlet-name>log4jServlet</servlet-name>
<servlet-class>Log4JServlet</servlet-class>
<init-param>
<param-name>profile</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
用标准名的话不用写这个吧,,,,
public void contextInitialized(ServletContextEvent arg0) {
Log log = LogFactory.getLog(Mylog4jServlet. class );
DOMConfigurator.configure("log4j.xml");
log.info("Mylog4jServlet");
}
2。web.xml
<listener>
<listener-class>servlet.Mylog4jServlet</listener-class>
</listener>这两个文件照着你说的写的. log4j.xml 放在了WEB-INF下面,可是总报错呀,,,
log4j:ERROR Could not parse file [log4j.xml].
java.io.FileNotFoundException: C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin\log4j.xml (系统找不到指定的文件。)
若把log4j.xml 放在 src 下面(也就是web-inf/class),,,倒可以正常写日志。
(这可能就是自动加载了吧)可是日志输出的位置并不是我想要的,,,
C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin
<context-param>
<description>web root</description>
<param-name>webAppRootKey</param-name>
<param-value>SpringTest002.root</param-value>
</context-param>log4j.xml<param name="File" value="${SpringTest002.root}/WEB-INF/calsses/logs/debug.log"/>>我这样写为什么还是报错呀,,,
能不能说的详细点呀,,,就差这么一点了,,,,解决了算了,,,
java.io.FileNotFoundException: d:atal.log (文件名、目录名或卷标语法不正确。)您的问题解决了没,如果已解决能不能给出给出方案,我的报的是这个错啦,找不到解决方案.谢谢