Java - 日志收集与处理

本文介绍了Java日志系统的核心组成部分——日志记录器和日志处理器。日志记录器按设定级别记录日志,并通过全局或按名创建。日志级别包括七个等级,通常使用INFO级别及以上输出常规信息,DEBUG级别用于调试。日志处理器则负责日志的显示,包括Console、File和Memory三种类型,默认工作在INFO级别。正确配置日志处理器和记录器,可以实现有效且高效的日志管理。

日志的出现是为了弥补使用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级别的信息
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值