多种 RollingFile 机制,支持文件大小触发、按天触发等 Rolling 方式
多日志级别,支持 debug、info、warn、error和 fatal 等日志级别
热加载,由日志事件触发热加载
超轻量,不依赖任何第三方库
性能保证,成功用于日交易额百亿级交易系统
使用
既然是个超轻量级日志,使用肯定要很简单。为***程度保持用户的使用习惯,Flogger 提供了与 log4j 几乎一样的日志 API。你只需要先获取一个实例,接下来的使用方式就非常简单了:
1
2
3
4
5
6
7
8
//获取单例
FLogger logger = FLogger.getInstance();
//简便api,只需指定内容
logger.info("Here is your message…");
//指定日志级别和内容,文件名自动映射
logger.writeLog(Constant.INFO, "Here is your customized level message…");
//指定日志输出文件名、日志级别和内容
logger.writeLog("error", Constant.ERROR, "Here is your customized log file and level message…");
Flogger 使用的配置文件名称为 flogger.properties,内部实现了灵活的配置文件加载机制。配置文件加载顺序为:
项目根路径
src/main/resources
默认配置
配置项如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
########## 公共环境配置 ##########
# 字符集
CHARSET_NAME = UTF-8
########## 日志信息配置 ##########
# 日志级别 0:调试信息 1:普通信息 2:警告信息 3:错误信息 4:严重错误信息
LOG_LEVEL = 0,1,2,3,4
# 日志文件存放路径
LOG_PATH =./log
# 日志写入文件的间隔时间(默认为1000毫秒)
WRITE_LOG_INV_TIME = 1000
# 单个日志文件的大小(默认为10M)
SINGLE_LOG_FILE_SIZE = 10485760
# 单个日志文件缓存的大小(默认为10KB)
SINGLE_LOG_CACHE_SIZE = 10240
当然,为了提供***程度的便捷性,日志内部针对所有配置项都提供了默认值,你大可不必担心缺少配置文件会抛出异常。
至此,你可能很好奇使用 FLogger 打印出来的日志格式到底是怎样的,会不会杂乱无章无法理解,还是信息不全根本无法判断上下文呢?好吧,你多虑了,FLogger 提供了非常规范且实用的日志格式,能使让你很容易理解且找到相关上下文。
先来看看上面的 demo 代码打印出来的结果:
info.log
1
[INFO] 2016-12-06 21:07:32:840 [main] Here is your message…
warn.log
1
[WARN] 2016-12-06 21:07:32:842 [main] Here is your customized level message…
error.log
1
[ERROR] 2016-12-06 21:07:32:842 [main] Here is your customized log file and level message…
从上面可以看到,你可以很清楚的分辨出日志的级别、时间和内容等信息。到这其实很明了了,日志由以下几个元素组成:
1
[日志级别] 精确到毫秒的时间 [当前线程名] 日志内容
当然,处于便捷性的考虑,FLogger 目前并不支持用户定义日志格式,毕竟它的目的也不是要做成一个通用性或者可定制性非常高的日志来使用。
源码解析
上面这么多都是围绕如何使用进行说明,下面就针对 FLogger 的特性进行实现逻辑的源码解析。