1.总体架构

2. 底层封装
2.1 方案
提供一个写日志工具类WwtBaseLog, 默认写入日志文件名为:base.log
与原有的logback日志共存,对原有的日志无影响,只是通过该工具类写入的日志,符合某种要求的格式,利于分析,不建议将所有的日志都通过该工具进行写入,因为对于查找问题而言,可能只需要一个入参与出参就可以了。举个例子:
pay模块的订单支付申请,带删除线的个人不需要通过该日志工具进行写入,直接采用logback写入即可
- 记录入参日志
获取订单锁支付订单内部状态机转换数据库入参日志一些其它的日志数据库返回行数日志- 处理结果返回日志
2.2 日志写入逻辑
- 先同步写入队列中,队列定义为1000个大小,可以调整
- 启动一个线程池,目前只设置一个线程,对队列中的数据通过logback写入
- 防止程序退出时,队列中的数据丢失,需要注册一个钩子,退出程序时需要写入所有日志
- 监控日志工具本身所产生的日志,实时写入,主要是队列大小,线程使用情况3
2.3 基础字段定义,类名BaseLogModel
ip 当前服务器的IP
port 当前应用的端口
thread 当前程序的线程名
requestUrl 请求地址
level 日志级别
datetime 当前时间
class 当前类名
line 当前输出日志所在文件的行数
method 当前执行程序的方法名
model 日志所属模块
logtype 日志类型:比如 订单,结算,清分,支付,申请,鉴权等
sublogtype 日志子类型: 日志类型的中间过程,入参,出参,中间态等
msg 日志内容
template 日志内容输出格式化模版
2.4 扩展字段定义
ext1,ext2,ext3,ext4,ext5
提供5个扩展字段,内容拼接在基础字段的后面。如果需要其它字段,且顺序需要自定义,那边需要基础层扩展基础类BaseLogModel
2.5 日志类容按指定顺序输出
日志可以根据模版所配置的顺序进行输出,默认模版定义如下
ip|port|thread|....|ext1|ext2|...|ext5
3 基础层分装
3.1 方案
基础层基于底层的BaseLog进行处理,如果没有个性化的需求,可以直接调用WwtBaseLog进行日志输出,下面以Pay模块的订单日志进行举例:
- 定义PayOrderLogModel 继承 BaseLogModel
- 日志工具,依然使用WwtBaseLog进行日志写入
- 为了方便日志调用,需要上面再封装一层,可以直接传入订单对象,或JSON对象,再解析成PayOrderLogModel
3.2 需要封装的日志工具类
订单日志工具,额外字段定义
amout 订单金额
order_status 订单状态
order_type 订单类型
4 应用层日志输出
4.1 EIS 日志输出
所有EIS的入参与出参调用baseLog进行日志写入
与外部通道调用baselog进行日志写入
4.2 PAY 模块日志输出
调用WwtPayOrderLog 进行日志输出
4.3 EPS 模块日志输出
入参与出参调用baselog进行日志输出
网友评论