日志框架-logtube
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)
- 打印日志
IEventLogger logger = Logtube.getLogger(LogtubeTest.class);
// 传统纯文本日志(带关键字,生产环境要求 INFO 必须有关键字)
logger.keyword("关键字1", "关键字2").info("hello world");
- 添加maven依赖
<dependency>
<groupId>io.github.logtube</groupId>
<artifactId>logtube</artifactId>
<version>0.38.0</version>
</dependency>
- 移除 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>
- 添加 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;
}
}
- 在resources 添加Logtube.yml
logtube:
# 临时测试使用 生产建议使用Apollo 配置
config-file: logtube-local.properties
# config-file=APOLLO
- 方便本地调试在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的更多相关文章
- 解读ASP.NET 5 & MVC6系列(9):日志框架
框架介绍 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging使用起来多多少少都有些费劲,和java的SLF4J根本无法相比. ...
- Java日志框架:SLF4J,Common-Logging,Log4J,Logback说明
Log4j Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等 ...
- java日志框架slf4j与log4j
日志记录自然是非常重要的,但恐怕能记住slf4j与log4j等日志框架配置的人就很少了,这个东西不难,只是配置好后很少会去动它,开发新项目一般也是从其他项目拷贝,或者参照文档 废话不多说,先说log4 ...
- Moon转告给你一个比Log4net更好日志框架--TracerX Logger 及其对应的日志查看器
一.介绍 TracerX logger是一个易于上手,且拥有众多高级特性的.NET日志框架. 它能够发送输出结果到多目的地(循环文件.事件日志等....).它也能生成文本和二进制文件.它拥有一个强大的 ...
- lombok+slf4j+logback SLF4J和Logback日志框架详解
maven 包依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lomb ...
- log4net 日志框架的配置
log4net 日志框架的配置——静态文件(一) 添加对log4net程序集的引用 选择程序集文件添加引用即可,需要注意的是需要添加相应程序版本的程序集,如果你的应用是基于.netFramework2 ...
- 日志框架对比 NLog VS Log4net
Log4net 先说Log4net,它是.net平台上一个老牌的日志框架,我接触的时间也不长(因为公司有自己的日志库),但是看着各开源库都在用这个于是前段时间也尝试去了解了一下. 首先让我认识到Log ...
- Java程序员最常用的8个Java日志框架
转自:http://www.codeceo.com/article/8-java-log-framework.html 作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用.WEB应用 ...
- Java日志框架 (commons-logging,log4j,slf4j,logback)
转自:http://blog.csdn.net/kobejayandy/article/details/17335407 如果对于commons-loging.log4j.slf4j.LogBack等 ...
随机推荐
- 搞定 NodeJS 开发调试
代码调试有时候是一种充满挑战的工作,如果有一个趁手的调试工具的话,往往可以做到事半功倍的效果.得益于这些年的快速发展,在 NodeJS 生态中已经有了多种调试工具可以使用.我们今年就来分享几个常用的调 ...
- 鸿蒙内核源码分析(汇编汇总篇) | 所有的汇编代码都在这里 | 百篇博客分析OpenHarmony源码 | v40.03
百篇博客系列篇.本篇为: v40.xx 鸿蒙内核源码分析(汇编汇总篇) | 汇编可爱如邻家女孩 | 51.c.h .o 硬件架构相关篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU在哪 ...
- Phalcon如何切换数据库《Phalcon入坑指南系列 三》
本系列目录 一.Phalcon在Windows上安装 <Phalcon入坑指南系列 一> 二.Phalcon入坑必须知道的功能(项目配置.控制器.模型.增.删.改.查) 三.Phalcon ...
- CSS 奇技淫巧 | 妙用 drop-shadow 实现线条光影效果
本文将介绍一种利用 CSS 滤镜 filter 的 drop-shadow(),实现对 HTML 元素及 SVG 元素的部分添加阴影效果,以实现一种酷炫的光影效果,用于各种不同的场景之中.通过本文,你 ...
- 我惊了!CompletableFuture居然有性能问题!
你好呀,我是歪歪. 国庆的时候闲来无事,就随手写了一点之前说的比赛的代码,目标就是保住前 100 混个大赛的文化衫就行了. 现在还混在前 50 的队伍里面,稳的一比. 其实我觉得大家做柔性负载均衡那题 ...
- Java基础语法(语法、位运算、JavaDoc等)
一.注释.标识符.关键字 1.注释(comments) 平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己编写的代码,但是当项目结构一旦复杂起来,我们就需要用到注释了! 注释并不会被程序执行, ...
- Spring框架访问数据库的两种方式的小案例
1.1 以Xml的方式访问数据库的案例 要以xml的方式访问数据库需要用到JdbcTemplate ,因为 JdbcTemplate(jdbc的模板对象)在Spring 中提供了一个可以操作数据库的对 ...
- 4.19——数组双指针——26. 删除有序数组中的重复项 & 27. 删除有序数组中的重复项II & 80. 删除有序数组中的重复项 II
第一次做到数组双指针的题目是80: 因为python的List是可以用以下代码来删除元素的: del List[index] 所以当时的我直接用了暴力删除第三个重复元素的做法,大概代码如下: n = ...
- 在Windows上使用Docker 创建MongoDB 副本集的极简方法(翻译)
这篇博客介绍下在Windows上使用Docker 创建MongoDB 三节点副本集的最简单的方法.以下命令需要Docker for Windows并使用Linux 容器. 1: 为每个节点创建数据卷 ...
- 【UE4 C++ 基础知识】<6> 容器——TMap
概述 TMap主要由两个类型定义(一个键类型和一个值类型),以关联对的形式存储在映射中. 将数据存储为键值对(TPair<KeyType, ValueType>),只将键用于存储和获取 映 ...