Java

来源:互联网 发布:图片处理器软件 编辑:程序博客网 时间:2024/06/17 12:29

日志的出现是为了弥补使用System.out.println()进行调试的不足. 因为打印语句需要我们一条一条手动控制.

日志的管理分为两大部分:

  • 日志记录器
  • 日志处理器

日志记录器负责按设定级别对日志进行记录和向上传递, 日志处理器负责按设定级别对日志进行打印.

日志记录器

使用全局日志记录器

最简单的使用情况是通过调用Logger.getGlobal()获得全局日志记录器. 然后通过info()这样的方法来按级别输出日志.

可以通过Logger.global.setLevel(Level.OFF)设置日志级别. 现在设置的是OFF, 则所有的日志信息都不会输出.

注意 日志输出语句只要存在, 无论是否最终进行了输出, 其消息体就会创建, 如果担心消息创建的代价, 可以使用lambda表达式代替. 详见 Jav8 - 通过lambd表达式进行计算 一文.

按名创建日志记录器

如果你想对每个类创建分离的日志记录器, 可以使用以下语句:

Logger logger = Logger.getLogger(LoggerExample.class.getName());

注意 日志记录器是有层级的, 也就是说如果你有一个日志记录器名为com.congyh, 如果你关闭了com日志记录器的日志输出, 那么com.congyh也不会进行日志输出.

日志级别

日志共有七种级别: SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST.

默认情况下, 会输出INFO及以上级别的日志, 可以通过使用Level.ALL来开启所有级别的日志, 也可以按日志级别进行控制.

你应该使用CONFIG及以下级别的日志来输出debug信息.

日志处理器

日志处理器按照输出的形式分为三种: ConsoleHandler, FileHandler, SocketHandler.

默认的日志处理器工作在INFO级别, 如果不对其进行修改, 即使日志记录器设置在例如CONFIG级别, 那么日志实际上是只记录不输出. 假设我们现在有一个类叫做LoggerExample, 正确的使用案例如下:

// 按名创建日志记录器Logger logger = Logger.getLogger(LoggerExample.class.getName());logger.setLevel(Level.CONFIG);ConsoleHandler consoleHandler = new ConsoleHandler();consoleHandler.setLevel(Level.CONFIG);logger.addHandler(consoleHandler);logger.config("使用按名创建的logger输出CONFIG级别的信息");

程序输出如下:

三月 05, 2017 10:24:49 上午 com.github.congyh.log.LoggerExample main配置: 使用按名创建的logger输出CONFIG级别的信息
0 0
原创粉丝点击