mica-logging(logback 的日志扩展)

规则

  1. 默认情况下,打印 console 日志、all.logerror.log
  2. 设置为 json 格式化,打印 console 日志(非 json)、all.logjson 格式,可用于 filebeat 收集)。
  3. 开启 logstash,打印 console 日志,并将日志输出到 logstash(建议关闭掉 file 输出)。
  4. 可配置启动完成关闭 console 日志。

功能

  1. 默认日志配置。
  2. 打印 json 日志文件。
  3. logstash 日志收集。
  4. 启动完成关闭控制台日志。

依赖引用

maven

xml
<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-logging</artifactId>
  <version>${version}</version>
</dependency>

gradle

groovy
compile("net.dreamlu:mica-logging:${version}")

配置

配置项默认值说明
mica.logging.console.close-after-startfalse是否启动完成后将自动关闭控制台日志,默认false非开发环境建议设置为 true
mica.logging.files.enabledtrue是否开启日志文件 all.logerror.log
mica.logging.files.use-json-formatfalse使用 json 格式化(需 logstash-logback-encoder 依赖),设置后文件打印 json 日志,可用于 filebeat 收集日志文件

特别注意: 需要配置服务名环境,例如:

yaml
spring:
  application:
    name: mica-test
  profiles:
    active: dev

logstash 日志

依赖项

  • 开启 json 文件或 logstash 必须添加该依赖!!!
xml
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>${version}</version>
</dependency>
  • logstash 默认使用的 disruptor 异步,额外还需要添加依赖
xml
<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>${version}</version>
</dependency>

配置项

配置项默认值说明
mica.logging.logstash.enabledfalse是否开启 logstash 日志收集,直接收集到 logstash
mica.logging.logstash.custom-field-map{}自定义字段 key、value 形式。
mica.logging.logstash.destinationslocalhost:5000目标地址,默认: localhost:5000,示例: host1.domain.com,host2.domain.com:5560
mica.logging.logstash.ring-buffer-size512logstash 队列大小

loki 日志收集

依赖项

  • java8
xml
<dependency>
    <groupId>com.github.loki4j</groupId>
    <artifactId>loki-logback-appender-jdk8</artifactId>
    <version>1.3.2</version>
</dependency>
  • java11
xml
<dependency>
    <groupId>com.github.loki4j</groupId>
    <artifactId>loki-logback-appender</artifactId>
    <version>1.3.2</version>
</dependency>
  • 可选依赖 OkHttp
xml
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.14.9</version>
</dependency>
  • 可选依赖 apache httpclient
xml
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>
  • 可选依赖 Protobuf (ProtoBuf 日志编码必须)
xml
<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.15.1</version>
</dependency>
<dependency>
    <groupId>org.xerial.snappy</groupId>
    <artifactId>snappy-java</artifactId>
    <version>1.1.8.4</version>
</dependency>

配置项

配置项默认值说明
mica.logging.loki.enabledfalse是否开启 loki 日志收集
mica.logging.loki.batch-max-bytes0
mica.logging.loki.batch-max-items1000通用配置
mica.logging.loki.batch-timeout-ms60000
mica.logging.loki.drain-on-stoptrue
mica.logging.loki.encoderjson编码方式 Json 或 ProtoBuf
mica.logging.loki.format-label-patternappName=${appName},profile=${profile},host=${HOSTNAME},level=%level,traceId=%X{traceId:-NAN},requestId=%X{requestId:-NAN}format 配置
mica.logging.loki.format-label-pattern-extendformat 配置扩展格式同 format-label-pattern
mica.logging.loki.format-label-pair-separator,
mica.logging.loki.format-label-key-value-separator=
mica.logging.loki.format-label-no-pextrue
mica.logging.loki.format-message-patternl=%level c=%logger{20} t=%thread %msg %ex消息体格式
mica.logging.loki.format-sort-by-timefalse
mica.logging.loki.format-static-labelsfalse
mica.logging.loki.http-auth-username
mica.logging.loki.http-auth-password
mica.logging.loki.http-auth-tenant-id
mica.logging.loki.http-urlhttp 配置,默认:http://localhost:3100/loki/api/v1/push
mica.logging.loki.http-senderhttp sender,支持 java11、OKHttp、ApacheHttp,默认: 从项目依赖中查找,顺序 java11 -> okHttp -> ApacheHttp
mica.logging.loki.http-connection-timeout-ms30000
mica.logging.loki.http-request-timeout-ms5000
mica.logging.loki.metrics-enabledfalse开启 metrics
mica.logging.loki.send-queue-max-bytes41943040
mica.logging.loki.use-direct-bufferstrue使用堆外内存
mica.logging.loki.verbosefalse

日志示例

文件日志

shell
2021-03-25 21:03:55.275  INFO 2354 --- [XNIO-1 task-3] n.d.mica.mybatis.logger.SqlLogFilter     :

======= Sql Logger ======================
select id, parent_id, title, name, seq , path, permission, component, icon, is_frame , type, cache, hidden, status, remark , created_by, created_at, updated_by, updated_at from sys_menu where type in (0, 1) and hidden = false and status = 0
======= Sql Execute Time: 3.438ms =======

json 日志

json
{"loggingLevelRoot":"info","appName":"mica-fast","profile":"dev","level":"INFO","logger_name":"o.s.b.w.e.u.UndertowWebServer","message":"Undertow started on port(s) 8080 (http)","thread_name":"main","@timestamp":"2021-03-25T13:10:34.371Z"}

logstash 日志(stdout)

json
{
                "port" => 57146,
            "@version" => "1",
             "profile" => "dev",
         "logger_name" => "net.dreamlu.mica.mybatis.logger.SqlLogFilter",
             "appName" => "mica-fast",
         "thread_name" => "XNIO-1 task-3",
               "level" => "INFO",
         "level_value" => 20000,
             "message" => "\n\n======= Sql Logger ======================\nselect id, parent_id, title, name, seq , path, permission, component, icon, is_frame , type, cache, hidden, status, remark , created_by, created_at, updated_by, updated_at from sys_menu where type in (0, 1) and hidden = false and status = 0\n======= Sql Execute Time: 3.438ms =======\n",
    "loggingLevelRoot" => "info",
                "host" => "localhost",
           "requestId" => "d17d635f0a479f01f846199231008ec9",
          "@timestamp" => 2021-03-25T13:03:55.275Z
}

日志服务(云服务接入)

链接

参考