接下来我们介绍的:java.util.logging.Logger是在JDK 1.4 版本之后加入的,提供了日志记录的API ,可以往控制台/文件中写日志了。
Logger.getGlobal().info("log test");
public static Logger getLogger(String name)
Logger logger1 = Logger.getLogger("com.xiya.test.LogDemo"); Logger logger2 = Logger.getLogger("com.xiya.test.LogDemo"); System.out.println(logger1 == logger2);
返回true。
SEVERE | 严重 |
WARNING | 警告 |
INFO | 信息 |
CONFIG | 配置 |
FINE | 良好 |
FINER | 较好 |
FINEST | 最好 |
ALL | 开启所有级别日志记录 |
OFF | 关闭所有级别日志记录 |
Logger的默认级别定义是在jre安装目录的lib下面的logging.properties。
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
Logger logger = Logger.getLogger("com.xiya.test.LogDemo"); logger.setLevel(Level.ALL); ConsoleHandler consoleHandler = new ConsoleHandler(); consoleHandler.setLevel(Level.FINEST); logger.addHandler(consoleHandler); logger.severe("严重"); logger.warning("警告"); logger.info("信息"); logger.config("配置"); logger.fine("良好"); logger.finer("较好"); logger.finest("最好");
四月 24, 2017 4:53:16 下午 com.xiya.test.LogDemo main
严重: 严重
四月 24, 2017 4:53:16 下午 com.xiya.test.LogDemo main
严重: 严重
四月 24, 2017 4:53:16 下午 com.xiya.test.LogDemo main
警告: 警告
四月 24, 2017 4:53:16 下午 com.xiya.test.LogDemo main
警告: 警告
四月 24, 2017 4:53:16 下午 com.xiya.test.LogDemo main
信息: 信息
四月 24, 2017 4:53:16 下午 com.xiya.test.LogDemo main
信息: 信息
四月 24, 2017 4:53:16 下午 com.xiya.test.LogDemo main
配置: 配置
四月 24, 2017 4:53:16 下午 com.xiya.test.LogDemo main
详细: 良好
四月 24, 2017 4:53:16 下午 com.xiya.test.LogDemo main
较详细: 较好
四月 24, 2017 4:53:16 下午 com.xiya.test.LogDemo main
非常详细: 最好
如上设置,我们可以显示所有级别的日志记录。我们看到严重、警告、信息都显示两次,这是由于logging.properties的原因。
简单的说:该文件定义了Logger默认的输出媒介控制器(Handler):java.util.logging.ConsolerHandler,也就是将信息输出至控制台。
我们也可以自定义logging.properties
测试:
import java.util.logging.*;
public class TestLogger {
public static void main(String[] args) {
Logger log = Logger.getLogger("com");
log.setLevel(Level.WARNING);
Logger log2 = Logger.getLogger("com.xiya");
log2.info("111");
log2.severe("222");
log2.warning("333");
}
}
输出:
四月 24, 2017 12:19:32 下午 TestLogger main
严重: 222
四月 24, 2017 12:19:32 下午 TestLogger main
警告: 333
Handler 对象从 Logger 中获取日志信息,并将这些信息导出。例如,它可将这些信息写入控制台或文件中,也可以将这些信息发送到网络日志服务中,或将其转发到操作系统日志中。
可通过执行 setLevel(Level.OFF) 来禁用 Handler,并可通过执行适当级别的 setLevel 来重新启用。
Handler 类通常使用 LogManager 属性来设置 Handler 的 Filter、Formatter 和 Level 的默认值。
import java.util.logging.*;
import java.io.IOException;
public class TestLogger {
public static void main(String[] args) throws IOException {
Logger log = Logger.getLogger("com");
log.setLevel(Level.INFO);
Logger log1 = Logger.getLogger("com.xiya");
ConsoleHandler consoleHandler =new ConsoleHandler();
consoleHandler.setLevel(Level.ALL);
log.addHandler(consoleHandler);
FileHandler fileHandler = new FileHandler("testlog.log");
fileHandler.setLevel(Level.INFO);
//fileHandler.setFormatter(new SimpleFormatter());
log.addHandler(fileHandler);
log.info("111");
log1.info("222");
log1.fine("333");
}
}
输出:
四月 24, 2017 3:29:27 下午 TestLogger main
信息: 111
四月 24, 2017 3:29:27 下午 TestLogger main
信息: 111
四月 24, 2017 3:29:27 下午 TestLogger main
信息: 222
四月 24, 2017 3:29:27 下午 TestLogger main
信息: 222
testlog.log
2017-04-24T15:30:23
1493019023251
0
com
INFO
TestLogger
main
1
111
2017-04-24T15:30:23
1493019023297
1
com.xiya
INFO
TestLogger
main
1
222
可见,默认的日志方式是xml格式,很烂。所以最好自定义下logger的格式。需要用Formatter来定义。
fileHandler.setFormatter(new SimpleFormatter());对应于:
四月 24, 2017 3:34:08 下午 TestLogger main
信息: 111
四月 24, 2017 3:34:08 下午 TestLogger main
信息: 222
当然我们可以自定义Formatter
package com.xiya.test;
import java.io.IOException;
import java.util.Date;
import java.util.logging.*;
/**
* Created by N3verL4nd on 2017/4/24.
*/
class LoggerFormatter extends Formatter {
@Override
public String format(LogRecord record) {
return "[" + new Date() + "]" + " [" + record.getLevel() + "] "
+ record.getClass() + record.getMessage() + "\n";
}
}
public class LogDemo {
public static void main(String[] args) throws IOException {
Logger logger = Logger.getLogger("com.xiya.test.LogDemo");
logger.setLevel(Level.ALL);
ConsoleHandler consoleHandler = new ConsoleHandler();
logger.addHandler(consoleHandler);
FileHandler fileHandler = new FileHandler("testLog.log");
fileHandler.setFormatter(new LoggerFormatter());
logger.addHandler(fileHandler);
logger.info("hi");
}
}
参考:
http://mouselearnjava.iteye.com/blog/1926353
http://www.cnblogs.com/xingele0917/p/4120320.html
http://lavasoft.blog.51cto.com/62575/184492