论坛首页 Java企业应用论坛

log4j屏蔽system.out的方法

浏览 12315 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (17) :: 隐藏帖 (4)
作者 正文
   发表时间:2010-04-09   最后修改: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.setOut(new LoggerPrintStream(logName));
0 请登录后投票
   发表时间:2010-04-09  

e.printStackTrace不过是打到stderr了。

System.setOut(new LoggerPrintStream(pLoggerName));
System.setErr(new LoggerPrintStream(pLoggerName));



asialee 写道
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  
用IDE全局搜索下项目
0 请登录后投票
   发表时间:2010-04-09  
谢谢回复的各位!
0 请登录后投票
   发表时间:2010-04-09  
学到了,没想到有这种方法的:
System.setOut(……);
System.setErr(……);
0 请登录后投票
   发表时间:2010-04-09  
自己写一个outputstream,里面用log4j实现,启动的时候用

System.out = xxxx;

可以么
0 请登录后投票
   发表时间:2010-04-09  
根本就应该禁止写System.out,写了就让他删掉。
没事研究这技巧,真是闲的。
0 请登录后投票
   发表时间:2010-04-10  
congdepeng 写道
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.setOut(new LoggerPrintStream(logName));



正解,就是将系统标准输出流重定向到log4j的输出流中就可以完成。
0 请登录后投票
   发表时间:2010-04-11  
提一句
要是想在代码里把System.out替换成LOG4J之类的

LOG4E插件有这功能
0 请登录后投票
   发表时间:2010-04-11  
有没有办法直接把日志输出到一个HTML的页面里去,可访问的
0 请登录后投票
论坛首页 Java企业应用版

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