日志
日志的出现就是为了解决在反复修改错误程序中,取代System.out.println()的一种方法,不用每一次就去打印去验证自己的程序是否正确.
logging
java自带了一种日志包logging,下面存在很多类和方法可以使用:
import java.util.logging.Logger;
public class Main{
public static void main(String[] args) {
Logger logger = Logger.getGlobal(); // 获取时间格式
logger.info("start process...");
logger.warning("memory is running out...");
logger.fine("ignored.");
logger.severe("process will be terminated...");
}
}
运行:
只打印了三条,因为java自带的Logging日志系统规定了日志级别,info是默认级别,info以下的不输出,日志级别如下:
SEVERE
WARNING
INFO
CONFIG
FINE
FINER
FINEST
Commons Logging
Commons Logging是一个第三方日志库,它可以挂接不同的日志系统,并通过配置文件指定日志系统,默认情况下,Commons Logging自动搜索Log4j(一个流行的日志系统),没有找到的Log4j,再使用java自带的Logging系统.
有因为Commons Logging是一个第三方库,所以需要https://commons.apache.org/proper/commons-logging/download_logging.cgi ,然后在放到工程中,然后加入build path中:
而且Commons Logging日志系统也分等级,默认的级别是info:
FATAL
ERROR
WARNING
INFO
DEBUG
TRACE
Commons Logging只需要用Log和LogFactory,使用LogFactory创建Log实例,用Log的方法打印日志.
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Main{
public static void main(String[] args) {
Log log = LogFactory.getLog(Main.class); // getLog(类.class)
log.info("start....");
log.warn("end.");
}
}
如果在单独的一个类中使用日志系统,就要考虑到继承问题:
public class Person {
protected final Log log = LogFactory.getLog(getClass());
// 使用getclass()可以获取当前类.class
void foo() {
log.info("foo");
}
}
继承:
// 在子类中使用父类实例化的log:
public class Student extends Person {
void bar() {
log.info("bar");
}
}
由于java 的动态特性,子类获取log的实例就是getclass(),当前类,所以就无须改动代码.
info还有一个重载方法:info(String, Throwable),用来记录异常:
try {
...
} catch (Exception e) {
log.error("got exception!", e);
}