Java日志到了必须学习怎么使用的时候了,因为在项目中要进行使用。基础性文章,选择性
阅读。
【结构】
java日志对调试,记录运行,问题定位都起到了很重要的作用,一般常用的日志框架有:
sf4j
commons-logging
log4j
JDK自带logging
其他日志框架
【定义】
记录日志:一般在最开始写代码的时候总是会在代码中加入一些System.out.println方法的语句来观察代码运行的情况。这样需要反复加入和修改,日志API就是为了解决这个问题。
java.util.logging包就是JDK的日志开发包。
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI
组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
好处
可以很容易的取消全部日志记录,或者仅仅取消某个级别的日志,而且打开和关闭这个操作也很容易。
可以很简单地禁止日志记录的输出,因此,将这些日志代码留在程序中所付出的代价很小。
日志记录可以被定向到不同的处理器,用于在控制台中显示,用于存储在文件中。
日志记录器和处理器都可以对记录进行过滤。过滤器可以根据过滤实现器制定的标准丢弃那些无用的记录项。
日志记录可以采用不同的方式格式化。如:纯文本或者XML。
应用程序可以使用多个日志记录器,他们使用类似包名的这种具有层次结构的名称,如:com.mycompany.myapp。
在默认情况下,日志
系统的配置由配置文件控制,如果需要的话,应用程序可以替换这个配置。
【JDK自带logging】
一、 日志级别
级别
意义
等级
OFF
这个日志级别比较特殊,用来关闭日志
SEVERE
系统比较严重的错误级别,一般是无法恢复的bug
最高
WARNING
警告提示
INFO
普通信息输出
CONFIG
静态配置信息输出,如cpu,mem
FINE
FINE,FINER,FINEST三个日志级别都是用来跟踪日志信息,输出信息的详细程度依次递增
FINER
FINEST
最低
ALL
所有的日志信息都输出
在默认情况下,只记录前面三个级别。也可以设置级别如下:
1 logger.setLevel(Level.ALL);
二、例子
1. 代码
复制代码
1 import java.util.logging.ConsoleHandler;
2 import java.util.logging.Level;
3 import java.util.logging.Logger;
4
5 public class LoggerTest {
6 public static void main(String []args){
7 Logger logger =Logger.getLogger("cn.cc.ccc");
8 /* ConsoleHandler handler=new ConsoleHandler();
9 handler.setLevel(Level.ALL);
10 logger.addHandler(handler);*/
11 logger.setLevel(Level.ALL);
12 logger.severe("严重错误");
13 logger.warning("警告信息");
14 logger.info("普通输出");
15 logger.config("配置信息");
16 logger.fine("日志信息");
17 logger.finer("日志信息");
18 logger.finest("日志信息");
19 }
20 }
复制代码
2. 结果:
1 四月 10, 2014 4:48:55 下午 LoggerTest main
2 严重: 严重错误
3 四月 10, 2014 4:48:55 下午 LoggerTest main
4 警告: 警告信息
5 四月 10, 2014 4:48:55 下午 LoggerTest main
6 信息: 普通输出
3. 问题:
进行了等级设置以后为什么不能输出下面的几个级别的信息?也就是为什么没有输出:
复制代码
1 四月 10, 2014 4:44:43 下午 LoggerTest main
2 配置: 配置信息
3 四月 10, 2014 4:44:43 下午 LoggerTest main
4 详细: 日志信息
5 四月 10, 2014 4:44:43 下午 LoggerTest main
6 较详细: 日志信息
7 四月 10, 2014 4:44:43 下午 LoggerTest main
8 非常详细: 日志信息
复制代码
4. 原因:
默认规定只能输出到INFO级别,我们没有修改配置文件,也就是使用了默认的配置。有两种修改方式,
一种是修改.properties文件(本文没有实现),默认情况下配置文件存在于:jre/lib/logging.properties
第二种是安装一个新的ConsoleHandler,如下代码:
复制代码
1 import java.util.logging.ConsoleHandler;
2 import java.util.logging.Level;
3 import java.util.logging.Logger;
4
5 public class LoggerTest {
6 public static void main(String []args){
7 Logger logger =Logger.getLogger("cn.cc.ccc");
8 ConsoleHandler handler=new ConsoleHandler();
9 handler.setLevel(Level.ALL);
10 lo