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

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

2. 使用 Logtube

  1. IEventLogger logger = Logtube.getLogger(LogtubeTest.class);
  2. // 传统纯文本日志
  3. logger.info("hello world");
  4. // 传统纯文本日志(带关键字,生产环境要求 INFO 必须有关键字)
  5. logger.keyword("关键字1", "关键字2").info("hello world");
  6. // 使用 extra 字段的结构化日志,需要用 commit() 做结束
  7. logger.topic("custom-topic").extras("key1", "val1", "key2", "val2").message("hello world").commit();
  8. // 打印结果
  9. [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. 打印日志
  1. IEventLogger logger = Logtube.getLogger(LogtubeTest.class);
  2. // 传统纯文本日志(带关键字,生产环境要求 INFO 必须有关键字)
  3. logger.keyword("关键字1", "关键字2").info("hello world");
  1. 添加maven依赖
  1. <dependency>
  2. <groupId>io.github.logtube</groupId>
  3. <artifactId>logtube</artifactId>
  4. <version>0.38.0</version>
  5. </dependency>
  1. 移除 logback-classic 和 xlog

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

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

举例:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. <exclusions>
  5. <exclusion>
  6. <groupId>ch.qos.logback</groupId>
  7. <artifactId>logback-classic</artifactId>
  8. </exclusion>
  9. </exclusions>
  10. </dependency>
  1. 添加 LogtubeFilter
  1. @Configuration
  2. public class LogtubeFilter {
  3. @Bean
  4. public FilterRegistrationBean<LogtubeHttpFilter> someFilterRegistration() {
  5. FilterRegistrationBean<LogtubeHttpFilter> registration = new FilterRegistrationBean<>();
  6. registration.setFilter(new LogtubeHttpFilter());
  7. registration.addUrlPatterns("*");
  8. registration.setName("logtube-http");
  9. registration.setOrder(1);
  10. return registration;
  11. }
  12. }
  1. 在resources 添加Logtube.yml
  1. logtube:
  2. # 临时测试使用 生产建议使用Apollo 配置
  3. config-file: logtube-local.properties
  4. # config-file=APOLLO
  1. 方便本地调试在resources 添加 logtube-local.properties
  1. ##########################################
  2. #
  3. # 项目基本信息
  4. #
  5. ##########################################
  6. #
  7. # 项目名
  8. logtube.project=dm-demo
  9. #
  10. # 项目环境
  11. logtube.env=local
  12. #
  13. # 全局主题过滤器,设置为不包括 trace 和 debug
  14. logtube.topics.root=ALL,-trace,-debug
  15. #
  16. # 分包主题过滤器
  17. #
  18. # logtube.topics.com.google.gson=error
  19. # logtube.topics.com.google.gson=error
  20. #
  21. # 全局主题映射,trace 合并进入 debug, error 重命名为 err, warn 合并进入 info
  22. logtube.topic-mappings=trace=debug,error=err,warn=info
  23. #
  24. #
  25. ##########################################
  26. #
  27. # 命令行输出
  28. #
  29. ##########################################
  30. #
  31. # 是否开启命令行输出,设置为开启
  32. logtube.console.enabled=true
  33. #
  34. # 命令行设置为包括所有主题
  35. logtube.console.topics=ALL
  36. #
  37. ##########################################
  38. #
  39. # 文本日志文件输出
  40. #
  41. ##########################################
  42. #
  43. # 是否开启文本日志文件输出,设置为开启
  44. logtube.file-plain.enabled=true
  45. #
  46. # 文本日志文件设置为输出所有传统日志主题,即所有日志级别,按照需要进行删减
  47. logtube.file-plain.topics=app,debug,info,err
  48. #
  49. # 文本日志文件输出的默认文件夹
  50. logtube.file-plain.dir=logs
  51. #
  52. # 文本日志文件输出的子文件夹,为特定日志主题,指定子文件夹
  53. logtube.file-plain.subdir-mappings=ALL=others,info=xlog,err=xlog
  54. #
  55. # 文本日志信号文件,touch 该文件,会触发文件描述符重新打开,用于日志轮转
  56. logtube.file-plain.signal=/tmp/xlog.reopen.txt
  57. #
  58. ##########################################
  59. #
  60. # JSON 日志文件输出
  61. #
  62. ##########################################
  63. #
  64. # 是否开启 JSON 日志文件输出,设置为关闭
  65. logtube.file-json.enabled=true
  66. #
  67. # JSON 日志文件输出应该输出除了传统日志主题的所有其他主题
  68. logtube.file-json.topics=ALL,-app,-debug,-info,-err
  69. #
  70. # JSON 日志文件输出的默认文件夹
  71. logtube.file-json.dir=logs
  72. #
  73. # JSON 日志文件输出的子文件夹,为特定日志主题,指定子文件夹
  74. logtube.file-json.subdir-mappings=ALL=others,x-druid-track=xlog,x-redis-track=xlog
  75. #
  76. # JSON 日志信号文件,touch 该文件,会触发文件描述符重新打开,用于日志轮转
  77. logtube.file-json.signal=/tmp/xlog.reopen.txt
  78. #
  79. ##########################################
  80. #
  81. # 远程输出,SPTP 协议
  82. #
  83. ##########################################
  84. #
  85. # 是否开启远程输出,设置为关闭
  86. logtube.remote.enabled=false
  87. #
  88. # 远程输出设置为包含所有主题
  89. logtube.remote.topics=ALL
  90. #
  91. # 远程输出目标主机,设置为为 127.0.0.1:9921,可使用逗号分隔多个主机
  92. logtube.remote.hosts=127.0.0.1:9921
  93. #
  94. ##########################################
  95. #
  96. # 远程输出,Redis 协议
  97. #
  98. ##########################################
  99. #
  100. # 是否开启远程输出,设置为关闭
  101. logtube.redis.enabled=false
  102. #
  103. # 远程输出设置为包含所有主题
  104. logtube.redis.topics=ALL
  105. #
  106. # 远程输出目标主机,设置为为 127.0.0.1:6379,可使用逗号分隔多个主机
  107. logtube.redis.hosts=127.0.0.1:6379
  108. #
  109. # 远程输出 Redis 键值
  110. logtube.redis.key=xlog
  111. #
  112. #########################################
  113. #
  114. # 组件配置
  115. #
  116. #########################################
  117. # 响应时间 > 100 ms 的 Redis 操作会被 LogtubeRedis 组件汇报
  118. logtube.filter.redis-min-duration=100
  119. # 结果集 > 1000 bytes 的 Redis 操作会被 LogtubeRedis 组件汇报
  120. logtube.filter.redis-min-result-size=1000
  121. 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. requests + 正则表达式 获取 ‘猫眼电影top100’。

    使用 进程池Pool 提高爬取数据的速度. 1 # !/usr/bin/python 2 # -*- coding:utf-8 -*- 3 import requests 4 from request ...

  2. WPF进阶技巧和实战03-控件(5-列表、树、网格01)

    列表控件 ItemsControl为列表项控件定义了基本功能,下图是ItemsControl的继承关系: 在继承自ItemsControl类的层次结构中,还显示了项封装器(MenuItem.TreeV ...

  3. windos10环境下编译python3版pjsua库

    环境:windows10_x64python3.9_x64pjsua-2.10vs2015 pjsua编译参考这里: https://www.cnblogs.com/MikeZhang/p/pjsip ...

  4. JVM堆内存泄露分析

      一.背景 公司有一个中间的系统A可以对接多个后端业务系统B,一个业务系统以一个Namespace代表, Namespace中包含多个FrameChannel(用holder保存),表示A连接到业务 ...

  5. ApacheCon 首次亚洲大会火热来袭,SphereEx 邀您共赴年度盛会!

    ApacheCon 是 Apache 软件基金会(ASF)的官方全球系列大会.作为久负盛名的开源盛宴,ApacheCon 在开源界备受关注,也是开源运动早期的知名活动之一. ApacheCon 每年举 ...

  6. MyBatis原生批量插入的坑与解决方案!

    前面的文章咱们讲了 MyBatis 批量插入的 3 种方法:循环单次插入.MyBatis Plus 批量插入.MyBatis 原生批量插入,详情请点击<MyBatis 批量插入数据的 3 种方法 ...

  7. 【转-Andrew_qian】stm32中断嵌套全攻略

    断断续续学习STM32一学期了,时间过的好快,现在对STM32F103系列单片机的中断嵌套及外部中断做一个总结,全当学习笔记.废话不多说,ARM公司的Cortex-m3 内核,支持256个中断,其中包 ...

  8. Go语言核心36讲(Go语言进阶技术四)--学习笔记

    10 | 通道的基本操作 作为 Go 语言最有特色的数据类型,通道(channel)完全可以与 goroutine(也可称为 go 程)并驾齐驱,共同代表 Go 语言独有的并发编程模式和编程哲学. D ...

  9. CentOS 用户与群组

    目录 1.用户管理 1.1.切换用户 1.2.添加用户 1.3.删除用户 1.4.修改用户 2.群组管理 2.1.查看群组 2.2.添加群组 2.3.删除群组 2.4.修改群组 1.用户管理 Linu ...

  10. Alpha阶段发布声明

    发布声明 Alpha 1.Alpha版本功能说明 功能列表和详情图 模块 功能 展示 首页 查看首页博文,搜索博文,可供未登录用户使用 动态 查看推荐动态给未登录用户使用,登录用户可以查看关注动态.我 ...