System.out输出的信息,难于控制,让log4j接管System.out。
第一步,自定义输出流,翻译成java语言就是Log4jPrintStream extends PrintStream,在该流中重写print方法,println方法,用log.debug输出
第二部,给jvm分配新的standard输出流,翻译成java语言就是 System.setOut(new Log4jPrintStream())
上干货,fuck goods
测试主类,SystemOut2Log.java
package redirect; public class SystemOut2Log { static { Log4jPrintStream.redirectSystemOut(); } public static void main(String[] args) { for (int i = 0; i < 10; i++) { System.out.print("abc"); System.out.print(i); System.out.print((int)(Math.random()*100)); } } }
System.out的装饰类
package redirect; import java.io.OutputStream; import java.io.PrintStream; import org.apache.log4j.Logger; public class Log4jPrintStream extends PrintStream { private Logger log = Logger.getLogger("SystemOut"); private static PrintStream instance = new Log4jPrintStream(System.out); private Log4jPrintStream(OutputStream out) { super(out); } public static void redirectSystemOut() { System.setOut(instance); } public void print(boolean b) { println(b); } public void print(char c) { println(c); } public void print(char[] s) { println(s); } public void print(double d) { println(d); } public void print(float f) { println(f); } public void print(int i) { println(i); } public void print(long l) { println(l); } public void print(Object obj) { println(obj); } public void print(String s) { println(s); } public void println(boolean x) { log.debug(Boolean.valueOf(x)); } public void println(char x) { log.debug(Character.valueOf(x)); } public void println(char[] x) { log.debug(x == null ? null : new String(x)); } public void println(double x) { log.debug(Double.valueOf(x)); } public void println(float x) { log.debug(Float.valueOf(x)); } public void println(int x) { log.debug(Integer.valueOf(x)); } public void println(long x) { log.debug(x); } public void println(Object x) { log.debug(x); } public void println(String x) { log.debug(x); } } /* * * public void println(boolean x) { * if(log.isDebugEnabled()) { * log.debug(Boolean.valueOf(x)); * } * } */
再配合log4j.properties
log4j.rootCategory=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%-5p\: %d{HH\:mm\:ss,SSS} %C{1}[ln\:%L]\: %m%n
看输出
DEBUG: 16:20:05,083 Log4jPrintStream[ln:77]: 4 DEBUG: 16:20:05,083 Log4jPrintStream[ln:89]: abc DEBUG: 16:20:05,083 Log4jPrintStream[ln:77]: 7 DEBUG: 16:20:05,084 Log4jPrintStream[ln:77]: 33 DEBUG: 16:20:05,084 Log4jPrintStream[ln:89]: abc DEBUG: 16:20:05,084 Log4jPrintStream[ln:77]: 8 DEBUG: 16:20:05,084 Log4jPrintStream[ln:77]: 89 DEBUG: 16:20:05,085 Log4jPrintStream[ln:89]: abc DEBUG: 16:20:05,085 Log4jPrintStream[ln:77]: 9 DEBUG: 16:20:05,085 Log4jPrintStream[ln:77]: 65
Log4j的HelloWorld 在javaSE中入门使用一
相关推荐
log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n ...
log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n #...
### set log levels ###log4j.rootLogger = debug , stdout , D , E### 输出到控制台 ###log4j.appender.stdout =org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target =System.outlog4j.appender.stdout....
log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} [ %t ] [ %p ]:%L - %m%n
Log4j的目标是:它允许开发人员以任意的精细程度控制哪些日志说明被输出。通过使用外部的配置文件,可以在运行时配置它。 Log4j的具体在 http://logging.apache.org/log4j/找到它(有使用的文档说明)。另外,log4j...
Loggers组件的主要功能是提供相应API,根据不同配置的loggers将不同级别的log输入到控制台或文件,类似于java中经常用到的System.out.println,但是log4j封装后的loggers组件能够输出更丰富的信息,包括时间,线程,...
Java Log4j 1,2 所需Jar包,一个完整的软件,日志是必不可少的。程序从开发、测试、维护、运行等环节,都需 要向控制台或文件等位置输出大量信息。这些信息的输出,在很多时候是使用 System.out.println()无法完成的。 ...
log4j.appender.stdout...log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j打印日志的专用的jar 里面有两个文件,一个.jar文件直接放在项目的lib里面就可以,另外的文件放在项目的src根目录的下面,打开里面就可以设置需要打印的日志信息,方便快捷查看日志信息和错误提示,欢迎下载。
Android中实现信息的输出java一般的打印办法为System.out.println("");J2ME也是,在ide的控制台就可以看到效果。但是android平台,System.out.println("");你是看不到打印的消息的。因为android提供的打印方法为,...
通常大家可以简单地使用System.out.println()语句输出日志信息,但是在发布时,通常不想在正式的版本中打印这些开发时的调试信息,于是又要手工地把这些语句删除,所以大量的这样的System.out.println()调试语句会...
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是...
log4j提供分级方法在程序中嵌入日志记录语句。日志信息具有多种输出格式和多个输出级别。 使用一个专门的日志记录包,可以减轻对成千上万的System.out.println语句的维护成本,因为日志记录可以通过配置脚本在运行时...
Log4j是一个开源的日志记录组件,其产品已经相当的成熟,且使用非常的广泛。在工程中以易用,方便等代替了 System.out 等打印语句
程序开发环境中的日志记录是由嵌入在程序中以输出一些对开发人员有用信息的语句所组成。例如,跟踪语句(trace),结构转储和...log4j提供分级方法在程序中嵌入日志记录语句。日志信息具有多种输出格式和多个输出级别。
Log4e是一个插件,是log4j日志很好的一个编写助手,Log4e是一个免费的Eclipse插件,它可帮助你在你的Java工程中快速加入日志。而且Log4e可以帮助你把System.out.println转成日志的输出,非常方便,还可以瞬间移除...
一:Log4j的组件介绍 A:)Log4j的三个重要组件—— Loggers, Appenders, Layouts 这三个组件协同的工作,使得开发者能够依据信息类别和级别去纪录信息,并能够 运行期间,控制信息记录的方式已经日志存放地点。 ...
大家在编程时经常不可避免地要使用到一些日志操作,比如开发阶段的调试信息、运行时的日志记录及审计。...通常大家可以简单地使用System.out.println()语句输出日志信息,但是往往会有一些判断,比如: