通常我们再编程时会引入很多第三方jar包,我们维护时一般情况下只关注我们自己的代码日志,但当第三方jar包出现异常时,同样需要关注,故我们期望日志按如下场景输出:
假设存在两个类:
log.open.test.log4j.LevelTest (业务代码)
log.a.LogA (引入的第三方代码)
如果想要将log.open包下的所有info级别的日志输出记录run.log中,其他路径下的日志如果出现error就输出到控制台,似乎通过log4j的配置搞不定啊,跪求大神的解决方案:我做了如下测试,没有找到方法,有没有大神碰到类似的场景并解决的:log4j配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!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">
<param name="ConversionPattern" value="%m %n" />
</layout>
</appender>
<appender name="RUN_LOG"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="logs/run.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="10MB" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n" />
</layout>
</appender>
<category name="log.open">
<priority value="INFO" />
<appender-ref ref="RUN_LOG" />
</category> <root>
<priority value="ERROR" />
<appender-ref ref="STDOUT" />
</root></log4j:configuration>2个测试类:
package log.a;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class LogA
{
private static Log logger = LogFactory.getLog(LogA.class);
public static void work()
{
logger.error("we face a exception!");
}
}package log.open.test.log4j;import log.a.LogA;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;public class LevelTest
{
private static Log logger = LogFactory.getLog(LevelTest.class);
public void work()
{
logger.info("ok, try to invoke LogA");
LogA.work();
}
public static void main(String[] args)
{
LevelTest test = new LevelTest();
test.work();
}
}
执行LevelTest类main方法,期望在控制台只输出:
we face a exception! 实际控制台输出了:
ok, try to invoke LogA
we face a exception! log4j日志
假设存在两个类:
log.open.test.log4j.LevelTest (业务代码)
log.a.LogA (引入的第三方代码)
如果想要将log.open包下的所有info级别的日志输出记录run.log中,其他路径下的日志如果出现error就输出到控制台,似乎通过log4j的配置搞不定啊,跪求大神的解决方案:我做了如下测试,没有找到方法,有没有大神碰到类似的场景并解决的:log4j配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!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">
<param name="ConversionPattern" value="%m %n" />
</layout>
</appender>
<appender name="RUN_LOG"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="logs/run.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="10MB" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n" />
</layout>
</appender>
<category name="log.open">
<priority value="INFO" />
<appender-ref ref="RUN_LOG" />
</category> <root>
<priority value="ERROR" />
<appender-ref ref="STDOUT" />
</root></log4j:configuration>2个测试类:
package log.a;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class LogA
{
private static Log logger = LogFactory.getLog(LogA.class);
public static void work()
{
logger.error("we face a exception!");
}
}package log.open.test.log4j;import log.a.LogA;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;public class LevelTest
{
private static Log logger = LogFactory.getLog(LevelTest.class);
public void work()
{
logger.info("ok, try to invoke LogA");
LogA.work();
}
public static void main(String[] args)
{
LevelTest test = new LevelTest();
test.work();
}
}
执行LevelTest类main方法,期望在控制台只输出:
we face a exception! 实际控制台输出了:
ok, try to invoke LogA
we face a exception! log4j日志
解决方案 »
- 搜索局域网内的服务器
- 刚看完了Java2实用教程
- java 查找文件 我用jsp直接生成一个文件,并且向里写入了一些数据,我在bean里想读出这个文件,我怎么才能找到这个文件
- 【帮忙】正则表达式:[*img1 align=left*]转换为<img src='img1' align='left'>
- rmi小问题!高手们快进来接分
- 怎么样把vector数组中的数据写到文件中去
- 信誉为重,请forjie领分
- 请问各位高手,getImage(URL url)中的URL url参数是怎么用的?
- 怎样让VisualAge 3.0 的帮助粗来?
- socket io流阻赛问题
- 求oracle for mac安装文件
- JAVA中Sockets长连接时使用read()阻塞的问题!急救!
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="ERROR" /> <layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m %n" />
</layout>
</appender>
<appender name="RUN_LOG"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="logs/run.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="10MB" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n" />
</layout>
</appender>
<category name="log.open">
<priority value="INFO" />
<appender-ref ref="RUN_LOG" />
</category> <root>
<priority value="ERROR" />
<appender-ref ref="STDOUT" />
</root></log4j:configuration>