日志规范

  1. 统一的日志输出格式。日志格式要能够符合日志解析平台能解析日志的所有前提条件。

    日志格式: [[[time | hostname | sysflag | tcode | level | path | logger | act | msg]]]

    time:时间戳 yyyy-MM-dd HH:mm:ss.SSS
    hostname:主机名
    sysflag:系统标识
    tcode:全局交易流水号 32位随机文本
    level:日志输出级别见第3点
    path:日志输出所对应的类和方法的路径信息。类路径+#+方法名
    logger:日志所在代码层次分类见第2点
    act:日志动作分类见第4点
    msg:日志文本内容
  2. 按日志所在代码层次分类(标识符:logger)

    框架级别上输出的日志会按照特定的几种类型来输出日志:

    HALO_SEV:Spring托管的Bean服务类的日志打印位置。
    HALO_DAO:Spring托管的DAO类的日志打印位置。
    HALO_ENV:REST/SOAP远程服务调用/被调用时产生日志的打印位置。
    HALO_WEB:Web交互的SpringMVC层时产生日志的打印位置。
    其他:由开发者自由定制的分类。例如类路径,自定义的标识等。
  3. 按日志输出级别(标识符:level)

    ERROR:错误日志。(框架级别可能输出)
    INFO:一般信息日志。(框架级别可能输出)
    WARNING:警告内容日志。
    DEBUG:调试日志。

    注:默认日志配置会开到INFO级别。不过各个系统可能会有调整。

  4. 按日志动作分类(标识符:act)

    日志的作用,除了做内容记录之外,也会在文本中隐含一些记录动作,日志解析平台可以结合这些动作做相应的统计和分析:

    TRAN_TCODE:交易流水号切换日志。
    LOG:非框架级的普通日志记录。
    MED_START:Spring托管的Bean服务类中,一次方法调用的起始时刻记录。
    MED_END:Spring托管的Bean服务类中,一次方法调用的结束时刻记录。
    MED_ARGS:Spring托管的Bean服务类中,一次方法调用所用的调用参数列表的JSON文本的记录。
    MED_RESP:Spring托管的Bean服务类中,一次方法调用后,方法返回值的JSON文本的记录。
    MED_EXP:Spring托管的Bean服务类中,一次方法调用时,出现异常时,对异常信息的记录。
    ENV_IN:REST/SOAP远程服务调用/被调用时,接收到报文的记录。
    ENV_OUT:REST/SOAP远程服务调用/被调用时,发送的报文的记录。
    ENV_EXP:REST/SOAP远程服务调被调用时,出现异常时,对异常信息的记录。
    WEB_EXP:用于Web交互的SpringMVC层,出现异常时,对异常信息的记录。
  5. 全局流水号切换日志:

    在特定场景下,同一个请求可能会产生流水号的切换,由于切换所导致两个不同交易产生的日志,需要日志解析平台通过全集流水号切换日志串联后,能够在一次查询动作中展示出来。

    日志格式举例:

    [[[time | 主机名 | 系统标识| 原有流水号 | level | path | logger | TRAN_TCODE | 要转换至的流水号]]]

日志组件功能

  1. 由框架输出的SEV,DAO, ENV的日志,支持黑名单和白名单,用开关来切换。

  2. 日志输出组件使用logback+slf4j。输出时采用 rxjava异步响应式处理+异步日志队列(logback自带,可关闭)的双异步策略。

日志统计分析功能

  1. 根据logger[SEV], act[MED_START, MED_END], tcode, path 统计最长执行时间,最短执行时间,平均执行时间。

  2. 根据logger[SEV], act[MED_START], path, 统计调用次数。

  3. 能够识别到全局流水号的切换动作,针对特定的流水号,可以分析查询出切换后的流水号信息。

Last updated