1。 jdk从1.4开始自带了日志功能,其优点是不需要类库的支持偏可以使用。然后其易用性,功能性却很差,因此很少使用。
jdk logging把日志分为几个级别:all,finest,finer,fine,config,info,warning,servere,off等,级别依次升高。如果把级别设为info,
则以前的不会输出。
例如(jdk1.6为例):
import java.util.logging.ConsoleHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
public class JDKLogTest {
public static Logger log = Logger.getLogger(JDKLogTest.class.toString());
static{
Handler console=null;
console = new ConsoleHandler();
/* try {
console = new FileHandler("filelog.log");
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
console.setLevel(Level.FINE);
log.addHandler(console);
}
public static void main(String[] args) {
log.setLevel(Level.FINE);
log.finest("finest");
log.finer("finer");
log.fine("fine");
log.config("config");
log.info("info");
log.warning("warning");
log.severe("servere");
}
}
输出的日志效果如下(info以上默认会输出一次,因此看到2次):
2012-9-13 22:05:06 com.logging.jdk.JDKLogTest main
良好: fine
2012-9-13 22:05:06 com.logging.jdk.JDKLogTest main
配置: config
2012-9-13 22:05:06 com.logging.jdk.JDKLogTest main
信息: info
2012-9-13 22:05:06 com.logging.jdk.JDKLogTest main
信息: info
2012-9-13 22:05:06 com.logging.jdk.JDKLogTest main
警告: warning
2012-9-13 22:05:06 com.logging.jdk.JDKLogTest main
警告: warning
2012-9-13 22:05:06 com.logging.jdk.JDKLogTest main
严重: servere
2012-9-13 22:05:06 com.logging.jdk.JDKLogTest main
严重: servere如果需要输出到日志文件,需要用FileHandler,然后日志格式却为xml格式,可读性较差。
2。 Log4j是目前应用最广泛的日志控件,他把日志分为All,TRACE,DEBUG,INFO,WARNING,ERROR,FITAL,OFF几个比界,级别依次升高,
级别高的LEvel屏蔽级别低的信息。
开发步骤如下:
a)添加类库log4j-1.2.13.jar.
b)编写log4j.properties配置文件。
例如:
log4j.rootLogger=INFO,A1,defaultLogger
#输出到控制台:
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{MM-dd HH:mm:ss}: %c[%t]-%-5p:%m%n
#每天生成一个文件
log4j.appender.defaultLogger=org.apache.log4j.DailyRollingFileAppender
log4j.appender.defaultLogger.File=H:\\workspace\\loggtest\\logs\\default.log
log4j.appender.defaultLogger.Encoding=UTF-8log4j.appender.defaultLogger.Threshold=error #文件只保存error以上的日志
log4j.appender.defaultLogger.DatePattern='.'yyyyMMdd
log4j.appender.defaultLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.defaultLogger.layout.ConversionPattern=%d{MM-dd HH:mm:ss}: %c[%t]-%-5p:%m%n
c)编写代码如下:
package com.logging.log4j;
import org.apache.log4j.Logger;
public class Log4jTest {private static Logger log = Logger.getLogger(Log4jTest.class);
public static void main(String[] args) {
// TODO Auto-generated method stub
log.trace("trace");
log.debug("debug");
log.info("info");
log.warn("warn");
log.error("error");
log.fatal("fatal");
try{
String s = null;
s.length();
}catch(Exception e){
log.trace("trace一个异常",e);
log.debug("debug一个异常",e);
log.info("info一个异常",e);
log.warn("warn一个异常",e);
log.error("error一个异常",e);
log.fatal("fatal一个异常",e);
}
}
}
控制台日志输出结果为:
09-13 22:29:07: com.logging.log4j.Log4jTest[main]-INFO :info
09-13 22:29:07: com.logging.log4j.Log4jTest[main]-WARN :warn
09-13 22:29:07: com.logging.log4j.Log4jTest[main]-ERROR:error
09-13 22:29:07: com.logging.log4j.Log4jTest[main]-FATAL:fatal
09-13 22:29:07: com.logging.log4j.Log4jTest[main]-INFO :info一个异常
java.lang.NullPointerException
at com.logging.log4j.Log4jTest.main(Log4jTest.java:19)
09-13 22:29:07: com.logging.log4j.Log4jTest[main]-WARN :warn一个异常
java.lang.NullPointerException
at com.logging.log4j.Log4jTest.main(Log4jTest.java:19)
09-13 22:29:07: com.logging.log4j.Log4jTest[main]-ERROR:error一个异常
java.lang.NullPointerException
at com.logging.log4j.Log4jTest.main(Log4jTest.java:19)
09-13 22:29:07: com.logging.log4j.Log4jTest[main]-FATAL:fatal一个异常
java.lang.NullPointerException
at com.logging.log4j.Log4jTest.main(Log4jTest.java:19)
文件日志为:09-13 22:32:57: com.logging.log4j.Log4jTest[main]-ERROR:error
09-13 22:32:57: com.logging.log4j.Log4jTest[main]-FATAL:fatal
09-13 22:32:57: com.logging.log4j.Log4jTest[main]-ERROR:error涓�涓紓甯�
java.lang.NullPointerException
at com.logging.log4j.Log4jTest.main(Log4jTest.java:19)
09-13 22:32:57: com.logging.log4j.Log4jTest[main]-FATAL:fatal涓�涓紓甯�
java.lang.NullPointerException
at com.logging.log4j.Log4jTest.main(Log4jTest.java:19)
注意:log4j.appender.defaultLogger.Threshold=error,可以单独为每个Appender设置日志级别。