浏览 9680 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-03
N多没用的日志。那么,如何控制最大限度log4j的配置文件输出需要的调试信息呢? Log4j的Logger组件配置可以帮助我们屏蔽不必要的日志输出,尤其在项目应用了大量第三方组件的时候, 通过控制Logger组件可以控制输出某一个组件的日志级别,帮助我们更好的进行调试。 注意:控制的粒度到类一级。也就是说,可以控制某一个类的日志如何输出。 限制:虽然不可以控制到方法一级,但是基本上也够用了。 假设我们现在的类命名空间在 com.foo 下面 我们有2个包 package com.foo.cartoon package com.foo.common 这2个包下面分别有自己的类文件 在package com.foo.cartoon包下有 com.foo.cartoon.Cat; 在package com.foo.common包下有 com.foo.common.Omia; 使用如下的配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%p [%t] %c{1}.%M(%L) | %m%n"/> </layout> </appender> <logger name="com.foo"> <level value="INFO"/> </logger> <logger name="com.foo.common"> <level value="DEBUG"/> </logger> <root> <level value="WARN"/> <appender-ref ref="CONSOLE"/> </root> </log4j:configuration> 那么 针对所有日志(<root>项配置) 都使用WARN级别输出 com.foo 路径下的Class 都使用INFO 级别输出 com.foo.common 路径下的Class 都使用DEBUG 级别输出 --------------- 假如想要控制com.foo.common.Omia这一个类的日志输出级别 只需要使用如下配置 <logger name="com.foo.common.Omia"> <level value="DEBUG"/> </logger> --------------- 如果项目中使用了第三方组件,那么可以用这样的方式控制日志 <logger name="org.apache.struts2"> <level value="DEBUG"/> </logger> <logger name="org.springframework"> <level value="INFO"/> </logger> 这样就可以让struts2的日志按Debug级别输出,让Spring的日志按Info级别输出 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-01-03
就是自定义logger
|
|
返回顶楼 | |
发表时间:2008-02-19
我下载了你的源码,没有看到com.frame.model.BaseObject这个类啊,你的com.foo.cartoon.Cat和com.foo.common.Omia都是继承这个BaseObject的啊,
这个BaseObject中是不是有如下的代码啊? public static Log log = LogFactory.getLog(BaseObject.class); |
|
返回顶楼 | |
发表时间:2008-02-21
qichunren 写道 我下载了你的源码,没有看到com.frame.model.BaseObject这个类啊,你的com.foo.cartoon.Cat和com.foo.common.Omia都是继承这个BaseObject的啊,
这个BaseObject中是不是有如下的代码啊? public static Log log = LogFactory.getLog(BaseObject.class); 是的,代码已经更新. |
|
返回顶楼 | |
发表时间:2008-02-22
tobato 写道 qichunren 写道 我下载了你的源码,没有看到com.frame.model.BaseObject这个类啊,你的com.foo.cartoon.Cat和com.foo.common.Omia都是继承这个BaseObject的啊,
这个BaseObject中是不是有如下的代码啊? public static Log log = LogFactory.getLog(BaseObject.class); 是的,代码已经更新. 可能是 protected final Log log = LogFactory.getLog(getClass()); 而不是 public static Log log = LogFactory.getLog(BaseObject.class); |
|
返回顶楼 | |
发表时间:2008-09-26
好似还是很不方便,比如:
<logger name="org.springframework"> <level value="ERROR"/> </logger> 这样org.springframework下面的类是可以控制到,但 org.springframework.jdbc org.springframework.aop org.springframework.core 等等包下面的类控制不到 如果我现在不想输入spring框架下的,总不能每个包都配置上吧?请问还有比较好的方法吗?还是我理解错了 |
|
返回顶楼 | |
发表时间:2008-10-05
stonecai 写道 好似还是很不方便,比如: <logger name="org.springframework"> <level value="ERROR"/> </logger> 这样org.springframework下面的类是可以控制到,但 org.springframework.jdbc org.springframework.aop org.springframework.core 等等包下面的类控制不到 如果我现在不想输入spring框架下的,总不能每个包都配置上吧?请问还有比较好的方法吗?还是我理解错了 可以控制到的 |
|
返回顶楼 | |
发表时间:2008-11-17
最后修改:2008-11-17
少了过滤功能,可以把WARN,DEBUG等信息输出到不同的文件。但一直有个难点是:如何把各种类型的信息输出到不同的文件。比如a.log中记录的是一种类型(比如全部的sql语句)的日志(包括所有级别的日志)
|
|
返回顶楼 | |