zoukankan      html  css  js  c++  java
  • 日志框架-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)

    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
    
    
  • 相关阅读:
    感知机学习算法 python实现
    最小二乘法 python实现
    python数据结构与算法——图的基本实现及迭代器
    python数据结构与算法——二叉树结构与遍历方法
    python数据结构与算法——字典树
    python数据结构与算法——完全树 与 最小/大堆
    win2008服务器asp站点配置要点
    SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条
    WinForm Control.Invoke&Control.BeginInvoke异步操作控件实例
    Couchbase应用示例(初探)
  • 原文地址:https://www.cnblogs.com/JiangWJ/p/14376829.html
Copyright © 2011-2022 走看看