论坛首页 Java企业应用论坛

log4j屏蔽system.out的方法

浏览 12237 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (17) :: 隐藏帖 (4)
作者 正文
   发表时间:2010-04-08  
现在项目中有些程序中用system.out打印log,我想用log4j配置屏蔽system.out,打印到日志文件中.不想让这些system.out的log打印到控制台中.有没有办法,各位有什么高见?
   发表时间:2010-04-08  
设置不同的Appender
0 请登录后投票
   发表时间:2010-04-08  
helin 写道
设置不同的Appender

怎么设置?说详细点好吗?
0 请登录后投票
   发表时间:2010-04-08  
log4j没有现成的功能做这个。如果你要做,一个办法是重定向console的output到一个stream,然后吧stream导入log4j 的appender里面。更简单的办法是search and replace.
0 请登录后投票
   发表时间:2010-04-08  
public static void setStdoutWithLogger(String logName)
{
System.setOut(new LoggerPrintStream(logName));
}

class LoggerPrintStream extends PrintStream{
Logger logger;
public LoggerPrintStream(String logName)
{
super(new ByteArrayOutputStream(0));
logger = Logger.getLogger(logName);
if( logger == null)
throw new RuntimeException("Can't logger:"+pLoggerName);
}
public void println(String s) {
log(s,level);
}
///其它它代码略.......
}

0 请登录后投票
   发表时间:2010-04-09  
如果你的配置像这样:
log4j.logger.com.xx.xxxx=debug, console2
那么紧接着再配一句:
log4j.additivity.com.xx.xxxx=debug, console2

就可以把日志打印到指定文件中,而不是控制台上



0 请登录后投票
   发表时间:2010-04-09  
楼上的方法只是合适rootLogger是控制台输出的方式。而且只需要log4j.additivity.com.xx.xxx=false即可。楼主的意思是想用Log4j来屏蔽在代码中hardcode 的 system.out.println()...暂时坐等高手回复
0 请登录后投票
   发表时间:2010-04-09  
据我所知不行,只能让程序员不写system.out
0 请登录后投票
   发表时间:2010-04-09  
codeutil 写道
public static void setStdoutWithLogger(String logName)
{
System.setOut(new LoggerPrintStream(logName));
}

class LoggerPrintStream extends PrintStream{
Logger logger;
public LoggerPrintStream(String logName)
{
super(new ByteArrayOutputStream(0));
logger = Logger.getLogger(logName);
if( logger == null)
throw new RuntimeException("Can't logger:"+pLoggerName);
}
public void println(String s) {
log(s,level);
}
///其它它代码略.......
}


这个不错,我们就这么用了,关键有时候不是System.out,就是e.printStackTrace()生成的日志特别乱。 这样就是相当于重定向。
0 请登录后投票
   发表时间:2010-04-09   最后修改:2010-04-09
以下加上注释即可

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[spboss]%d %p [%c] - <%m>%n

程序员写的system.out好像没法屏的吧
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics