Logtube 是什么

logtube 框架是基于 slf4j的一个日志框架封装, 源码地址: https://github.com/logtube

  • 基于 SLF4J框架, 扩展了日志输出格式 (兼容 SLF4J 日志打印)
  • Logtube 使用 主题 这一概念,它扩展了传统的日志等级(info, debug 等),可以包含用户自定义的字符串

为什么使用 Logtube

  • 可以生成 CRID (链路id)
  • 可以生成 CRSRC (服务调用记录)
  • 方便扩展 CRID 和 CRSRC 都是存放在请求头
  • 支持apollo配置日志
  • 搜索日志方式改变, 使用keyword精准搜索日志
  • 日志打印结果是json格式, 提高es的搜索性能(定义索引)

Logtube 对比 SLF4J 日志打印

1. 使用传统的 SLF4J Logger

Logger logger = LoggerFactory.getLogger(LogtubeTest.class);
logger.info("hello world");
logger.warn("warn test");
logger.trace("hello world {}", "222"); // 打印结果
###|||2021-02-05 11:32:02.466|||INFO|||91a76cb68ee94356812b66e2d2af779a.66.16124959224220185|||XNIO-1 task-39|||ApiInvoker--->Response: {"data":{}}

2. 使用 Logtube

IEventLogger logger = Logtube.getLogger(LogtubeTest.class);

// 传统纯文本日志
logger.info("hello world"); // 传统纯文本日志(带关键字,生产环境要求 INFO 必须有关键字)
logger.keyword("关键字1", "关键字2").info("hello world"); // 使用 extra 字段的结构化日志,需要用 commit() 做结束
logger.topic("custom-topic").extras("key1", "val1", "key2", "val2").message("hello world").commit(); // 打印结果
[2021-02-04 18:44:29.593 +0800] [{"c":"f9f7b56edf7abb22","s":"postman/dm-demo","k":"test","x":{"path":"/CheckRpcService/check","class_line":18,"method_name":"check","path_digest":"e5586ef193a17d95510d277bf6d4dc5e","thread_name":"http-nio-28081-exec-1","class_name":"com.ymck.demo.rpc.CheckServiceRpc"}}] ========= info ===========

SLF4J是根据logback.xml定义输出格式, Logtube是根据自定义的规则模板输出日志json格式, 用于ELK搜索优化,将传统日志打印内容都分词检索 -> 定义es索引模板(优化es性能)

说白了就是从打印日志内容都可以搜索 -> 只能搜索关键字, 这样的好处是日志精准搜索,规范开发打印日志的目的性,提高搜索效率

怎么使用 Logtube

java接入 (详细使用(支持多语言) https://github.com/logtube)

  1. 打印日志
IEventLogger logger = Logtube.getLogger(LogtubeTest.class);

// 传统纯文本日志(带关键字,生产环境要求 INFO 必须有关键字)
logger.keyword("关键字1", "关键字2").info("hello world");
  1. 添加maven依赖
<dependency>
<groupId>io.github.logtube</groupId>
<artifactId>logtube</artifactId>
<version>0.38.0</version>
</dependency>
  1. 移除 logback-classic 和 xlog

由于 Logtube Java SDK 已经实现了 SLF4J 接口,因此移除现有的 logback-classic 或其他 SLF4J 实现。

一些快速开发包,出于简化开发流程的目的,会内嵌 logback-classic 依赖,但其本质上仍然只使用了 SLF4J接口,如 spring-boot-starter-web。这种情况下可以使用 exclusion 移除内嵌的 logback-classic。

举例:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
  1. 添加 LogtubeFilter
@Configuration
public class LogtubeFilter {
@Bean
public FilterRegistrationBean<LogtubeHttpFilter> someFilterRegistration() {
FilterRegistrationBean<LogtubeHttpFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new LogtubeHttpFilter());
registration.addUrlPatterns("*");
registration.setName("logtube-http");
registration.setOrder(1);
return registration;
}
}
  1. 在resources 添加Logtube.yml
logtube:
# 临时测试使用 生产建议使用Apollo 配置
config-file: logtube-local.properties
# config-file=APOLLO
  1. 方便本地调试在resources 添加 logtube-local.properties
##########################################
#
# 项目基本信息
#
##########################################
#
# 项目名
logtube.project=dm-demo
#
# 项目环境
logtube.env=local
#
# 全局主题过滤器,设置为不包括 trace 和 debug
logtube.topics.root=ALL,-trace,-debug
#
# 分包主题过滤器
#
# logtube.topics.com.google.gson=error
# logtube.topics.com.google.gson=error
#
# 全局主题映射,trace 合并进入 debug, error 重命名为 err, warn 合并进入 info
logtube.topic-mappings=trace=debug,error=err,warn=info
#
#
##########################################
#
# 命令行输出
#
##########################################
#
# 是否开启命令行输出,设置为开启
logtube.console.enabled=true
#
# 命令行设置为包括所有主题
logtube.console.topics=ALL
#
##########################################
#
# 文本日志文件输出
#
##########################################
#
# 是否开启文本日志文件输出,设置为开启
logtube.file-plain.enabled=true
#
# 文本日志文件设置为输出所有传统日志主题,即所有日志级别,按照需要进行删减
logtube.file-plain.topics=app,debug,info,err
#
# 文本日志文件输出的默认文件夹
logtube.file-plain.dir=logs
#
# 文本日志文件输出的子文件夹,为特定日志主题,指定子文件夹
logtube.file-plain.subdir-mappings=ALL=others,info=xlog,err=xlog
#
# 文本日志信号文件,touch 该文件,会触发文件描述符重新打开,用于日志轮转
logtube.file-plain.signal=/tmp/xlog.reopen.txt
#
##########################################
#
# JSON 日志文件输出
#
##########################################
#
# 是否开启 JSON 日志文件输出,设置为关闭
logtube.file-json.enabled=true
#
# JSON 日志文件输出应该输出除了传统日志主题的所有其他主题
logtube.file-json.topics=ALL,-app,-debug,-info,-err
#
# JSON 日志文件输出的默认文件夹
logtube.file-json.dir=logs
#
# JSON 日志文件输出的子文件夹,为特定日志主题,指定子文件夹
logtube.file-json.subdir-mappings=ALL=others,x-druid-track=xlog,x-redis-track=xlog
#
# JSON 日志信号文件,touch 该文件,会触发文件描述符重新打开,用于日志轮转
logtube.file-json.signal=/tmp/xlog.reopen.txt
#
##########################################
#
# 远程输出,SPTP 协议
#
##########################################
#
# 是否开启远程输出,设置为关闭
logtube.remote.enabled=false
#
# 远程输出设置为包含所有主题
logtube.remote.topics=ALL
#
# 远程输出目标主机,设置为为 127.0.0.1:9921,可使用逗号分隔多个主机
logtube.remote.hosts=127.0.0.1:9921
#
##########################################
#
# 远程输出,Redis 协议
#
##########################################
#
# 是否开启远程输出,设置为关闭
logtube.redis.enabled=false
#
# 远程输出设置为包含所有主题
logtube.redis.topics=ALL
#
# 远程输出目标主机,设置为为 127.0.0.1:6379,可使用逗号分隔多个主机
logtube.redis.hosts=127.0.0.1:6379
#
# 远程输出 Redis 键值
logtube.redis.key=xlog
#
#########################################
#
# 组件配置
#
#########################################
# 响应时间 > 100 ms 的 Redis 操作会被 LogtubeRedis 组件汇报
logtube.filter.redis-min-duration=100
# 结果集 > 1000 bytes 的 Redis 操作会被 LogtubeRedis 组件汇报
logtube.filter.redis-min-result-size=1000
logtube.file.enabled=true

日志框架-logtube的更多相关文章

  1. 解读ASP.NET 5 & MVC6系列(9):日志框架

    框架介绍 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging使用起来多多少少都有些费劲,和java的SLF4J根本无法相比. ...

  2. Java日志框架:SLF4J,Common-Logging,Log4J,Logback说明

    Log4j  Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等 ...

  3. java日志框架slf4j与log4j

    日志记录自然是非常重要的,但恐怕能记住slf4j与log4j等日志框架配置的人就很少了,这个东西不难,只是配置好后很少会去动它,开发新项目一般也是从其他项目拷贝,或者参照文档 废话不多说,先说log4 ...

  4. Moon转告给你一个比Log4net更好日志框架--TracerX Logger 及其对应的日志查看器

    一.介绍 TracerX logger是一个易于上手,且拥有众多高级特性的.NET日志框架. 它能够发送输出结果到多目的地(循环文件.事件日志等....).它也能生成文本和二进制文件.它拥有一个强大的 ...

  5. lombok+slf4j+logback SLF4J和Logback日志框架详解

    maven 包依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lomb ...

  6. log4net 日志框架的配置

    log4net 日志框架的配置——静态文件(一) 添加对log4net程序集的引用 选择程序集文件添加引用即可,需要注意的是需要添加相应程序版本的程序集,如果你的应用是基于.netFramework2 ...

  7. 日志框架对比 NLog VS Log4net

    Log4net 先说Log4net,它是.net平台上一个老牌的日志框架,我接触的时间也不长(因为公司有自己的日志库),但是看着各开源库都在用这个于是前段时间也尝试去了解了一下. 首先让我认识到Log ...

  8. Java程序员最常用的8个Java日志框架

    转自:http://www.codeceo.com/article/8-java-log-framework.html 作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用.WEB应用 ...

  9. Java日志框架 (commons-logging,log4j,slf4j,logback)

    转自:http://blog.csdn.net/kobejayandy/article/details/17335407 如果对于commons-loging.log4j.slf4j.LogBack等 ...

随机推荐

  1. 「含源码」关于NXP IMX8 Mini的图形开发指南(GPU)案例分享!

    前言 Graphical Demo框架提供了对平台相关依赖的抽象.Graphical应用的通用封装,如模型加载.纹理加载.着色器编译等,以及其它一些通用的应用逻辑处理的封装,使得使用框架的开发人员(以 ...

  2. Gaussion

    # Kernel density estimation import numpy as np import matplotlib.pyplot as plt from scipy.stats impo ...

  3. hexo配合github action 自动构建(多种形式)

    已经使用HEXO正常构建GitHub页面 根据github action 给hexo配置自动部署github page 前往墨抒颖的个人网站查看纯净版 1. 为仓库设置访问密钥 第一步先生成密钥,打开 ...

  4. ansible远程运维操作

    1.command 用于查看文件内容,查看磁盘,内存,启动命令等纯命令信息 ansible portal -m command -a "cat /test1/test"2.ping ...

  5. WinForm 控件 DataGridView 常用操作

    1.取消列自动生成 在窗体load事件里面设置表格dataGridView的AutoGenerateColumns为 false dataGridView.AutoGenerateColumns = ...

  6. CentOS 7安装docker环境

    一.环境准备 Docker支持以下的CentOS版本: 1.Docker运行在CentOS 7(64-bit)上要求系统为64位,系统内核版本为3.10以上 2.Docker运行在Centos 6.5 ...

  7. B - Ancient Cipher POJ - 2159 解题报告

    内容: Ancient Roman empire had a strong government system with various departments, including a secret ...

  8. .Net微信服务商平台ApiV3接口

    最近做个对接微信服务商平台的小程序项目,大概要实现的流程是:a)特约商户进件 > b)生成带参数的小程序码 > c)小程序支付 > d)分账,记录一下,希望能对需要的朋友有所帮助 开 ...

  9. API代码实战

    API实例一: login.py文件 #!/usr/bin/env python #!coding:utf-8 from flask import Flask,jsonify from flask_r ...

  10. Windows10使用技巧

    Windows10配置技巧 新机配置 "我的电脑"图标设置 在桌面右击鼠标=>个性化=>点击左侧"主题"=>点击相关的设置中的"桌面 ...