`
yunmanfan
  • 浏览: 95671 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

log4j屏蔽system.out的方法

阅读更多
现在项目中有些程序中用system.out打印log,我想用log4j配置屏蔽system.out,打印到日志文件中.不想让这些system.out的log打印到控制台中.有没有办法,各位有什么高见?
分享到:
评论
22 楼 xindongwei 2012-05-30  
你好  能不能给我一份解决这个问题的实例
21 楼 friendmine 2010-04-13  
反编译,然后再编译一下就成了.
20 楼 yunmanfan 2010-04-12  
pipilu 写道
根本就应该禁止写System.out,写了就让他删掉。
没事研究这技巧,真是闲的。

怪我没说明白,这些System.out是在一个jar包中,我们没有源码.
19 楼 elvishehai 2010-04-11  
有没有办法直接把日志输出到一个HTML的页面里去,可访问的
18 楼 zhangthe9 2010-04-11  
提一句
要是想在代码里把System.out替换成LOG4J之类的

LOG4E插件有这功能
17 楼 zhxp791008 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的输出流中就可以完成。
16 楼 pipilu 2010-04-09  
根本就应该禁止写System.out,写了就让他删掉。
没事研究这技巧,真是闲的。
15 楼 坏孩子 2010-04-09  
自己写一个outputstream,里面用log4j实现,启动的时候用

System.out = xxxx;

可以么
14 楼 ccxw1983 2010-04-09  
学到了,没想到有这种方法的:
System.setOut(……);
System.setErr(……);
13 楼 yunmanfan 2010-04-09  
谢谢回复的各位!
12 楼 刃之舞 2010-04-09  
用IDE全局搜索下项目
11 楼 codeutil 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()生成的日志特别乱。 这样就是相当于重定向。

10 楼 congdepeng 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));
9 楼 linzy410 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好像没法屏的吧
8 楼 asialee 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()生成的日志特别乱。 这样就是相当于重定向。
7 楼 Dollyn 2010-04-09  
据我所知不行,只能让程序员不写system.out
6 楼 aaronluo 2010-04-09  
楼上的方法只是合适rootLogger是控制台输出的方式。而且只需要log4j.additivity.com.xx.xxx=false即可。楼主的意思是想用Log4j来屏蔽在代码中hardcode 的 system.out.println()...暂时坐等高手回复
5 楼 langyu 2010-04-09  
如果你的配置像这样:
log4j.logger.com.xx.xxxx=debug, console2
那么紧接着再配一句:
log4j.additivity.com.xx.xxxx=debug, console2

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



4 楼 codeutil 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);
}
///其它它代码略.......
}

3 楼 wumingshi 2010-04-08  
log4j没有现成的功能做这个。如果你要做,一个办法是重定向console的output到一个stream,然后吧stream导入log4j 的appender里面。更简单的办法是search and replace.

相关推荐

    终于调通了jetty8下的websocket的应用

    System.out.println("WebSocket连接关闭,原因:" + reason); } // 其他回调方法,如onWebSocketBinary、onWebSocketText等 } ``` 接下来,我们需要在Jetty服务器上注册这个处理器。这通常在服务器启动时完成:...

    BrowserEclipse-2013.1.13.7z

    android4.0浏览器在eclipse中编译的方法: BrowserEclipse\docs\readme.txt 注意: 如果下载已经修过的源码,只要进行3、4、8步骤就应该可以了。 eclipse版本;adt-bundle-windows (Android Developer Tools ...

    如何让service被管理器杀死后自动重启

    "让Service被管理器杀死后自动重启的方法" 在 Android 系统中,Service 是一个非常重要的组件,它可以在后台运行,执行一些重要的任务。但是,当系统内存不足时,系统可能会杀死一些服务以释放内存资源。这时,如果...

    Ubuntu_命令技巧

    使用“System Monitor”或“gnome-system-monitor”工具可以图形化地管理进程。 **4.13 查看进程打开的文件** 使用`lsof -p &lt;pid&gt;`命令可以查看指定进程打开的文件。 **4.14 显示开启文件abc.txt的进程** 使用`...

    亮剑.NET深入体验与实战精要2

    因pdf的容量过大分4个压缩包打包,还有一个源码另外下载。 《.NET深入体验与实战精要》作者身为从事.NET一线开发的资深开发专家,常年耕耘技术博客,惠及无数.NET新知。此次将长期的思考、感悟,多年的系统开发、...

    亮剑.NET深入体验与实战精要3

    因pdf的容量过大分4个压缩包打包,还有一个源码另外下载。 《.NET深入体验与实战精要》作者身为从事.NET一线开发的资深开发专家,常年耕耘技术博客,惠及无数.NET新知。此次将长期的思考、感悟,多年的系统开发、...

    Hadoop源代码分析 高清完整中文版PDF下载

    任何实现了Writable接口的类,都需要定义`write(DataOutput out)`和`readFields(DataInput in)`方法,来实现序列化和反序列化的逻辑。 以上内容为根据提供的文件部分描述的Hadoop源代码分析的知识点。该文件内容...

Global site tag (gtag.js) - Google Analytics