logtube 框架是基于 slf4j的一个日志框架封装, 源码地址: https://github.com/logtube
基于 SLF4J框架, 扩展了日志输出格式 (兼容 SLF4J 日志打印)
Logtube 使用 主题 这一概念,它扩展了传统的日志等级(info, debug 等),可以包含用户自定义的字符串
可以生成 CRID (链路id)
可以生成 CRSRC (服务调用记录)
方便扩展 CRID 和 CRSRC 都是存放在请求头
支持apollo配置日志
搜索日志方式改变, 使用keyword精准搜索日志
日志打印结果是json格式, 提高es的搜索性能(定义索引)
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":{}}
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性能)
说白了就是从打印日志内容都可以搜索 -> 只能搜索关键字, 这样的好处是日志精准搜索,规范开发打印日志的目的性,提高搜索效率
打印日志
IEventLogger logger = Logtube.getLogger(LogtubeTest.class);
// 传统纯文本日志(带关键字,生产环境要求 INFO 必须有关键字)
logger.keyword("关键字1", "关键字2").info("hello world");
添加maven依赖
移除 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
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
#
logtube.topics.root=ALL,-trace,-debug
#
#
#
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
#
logtube.file-plain.signal=/tmp/xlog.reopen.txt
#
##########################################
#
#
##########################################
#
logtube.file-json.enabled=true
#
logtube.file-json.topics=ALL,-app,-debug,-info,-err
#
logtube.file-json.dir=logs
#
logtube.file-json.subdir-mappings=ALL=others,x-druid-track=xlog,x-redis-track=xlog
#
logtube.file-json.signal=/tmp/xlog.reopen.txt
#
##########################################
#
#
##########################################
#
logtube.remote.enabled=false
#
logtube.remote.topics=ALL
#
logtube.remote.hosts=127.0.0.1:9921
#
##########################################
#
#
##########################################
#
logtube.redis.enabled=false
#
logtube.redis.topics=ALL
#
logtube.redis.hosts=127.0.0.1:6379
#
logtube.redis.key=xlog
#
#########################################
#
#
#########################################
logtube.filter.redis-min-duration=100
logtube.filter.redis-min-result-size=1000
logtube.file.enabled=true
手机扫一扫
移动阅读更方便
你可能感兴趣的文章