Maven 依赖
- 添加 Maven 依赖项
<dependency>
<groupId>io.github.logtube</groupId>
<artifactId>logtube</artifactId>
<version>0.6</version>
</dependency>
- 移除
logback-classic
和xlog
由于 Logtube Java SDK 已经实现了SLF4J
接口,因此移除现有的logback-classic
或其他SLF4J
实现。
一些快速开发包,出于简化开发流程的目的,会内嵌logback-classic
依赖,但其本质上仍然只使用了SLF4J
接口,如spring-boot-starter-web
。这种情况下可以使用exclusion
移除内嵌的logback-classic
。
最终需要确保执行mvn dependency:tree
不会出现logback-classic
参见:https://github.com/logtube/logtube-demo/blob/master/app/pom.xml
<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>
配置项目
- 移除所有的
logback.xml
文件 - 添加
logtube.properties
或者logtube.yml
文件
和 Logback 类似,Logtube Java SDK 会从 classpath 载入名为 logtube.properties 或者 logtube.yml 的配置文件。
参见:https://github.com/logtube/logtube-java/blob/master/src/test/resources/logtube.properties
参见:https://github.com/logtube/logtube-java/blob/master/src/test/resources/logtube.yml
下载到 main/resources,或者对应环境的子文件夹,注意修改 项目名,项目环境名 和 全局主题过滤器,并按照需要打开或关闭 一些输出。
运行于 Kubernetes 集群的项目建议关闭所有 file 输出,只使用 remote 输出。对于生产环境和预生产环境,建议关闭 console 和 remote 输出。
配置文件格式
配置文件格式在 0.8 版本之后经过一次修改
- 星号 * 关键字,改为大写 ALL 关键字
- logtube.topics 字段,重命名为 logtube.topics.root
多配置文件
如果想要使用多个配置文件,按环境切换。可以使用以下方法:
# 文件:logtube.properties
logtube.config-file=logtube-dev.properties # 此处可以通过类似 '@packaging.environment@' 变量来修改配置文件名
# 文件:logtube-dev.properties
#
# dev 环境的配置内容
# ...
# 文件:logtube-test.properties
#
# test 环境的配置内容
# ...
使用环境变量
logtube.properties
中,允许使用${KEY}
语法访问环境变量
使用 Logger
Logtube 和传统 Logger 最大的区别在于,Logtube 使用 主题 这一概念,它扩展了传统的日志等级(info
, debug
等),可以包含用户自定义的字符串。
比如,业务逻辑可以使用 info
主题来进行常规日志输出,Logtube 内置的 HTTP Filter 使用 x-access
主题来记录请求,二者为并列关系。
- 使用传统的 SLF4J Logger
Logger logger = LoggerFactory.getLogger(LogtubeTest.class);
logger.info("hello world");
logger.warn("warn test");
logger.trace("hello world {}", "222");
- 使用 LogtubeLogger
IEventLogger logger = Logtube.getLogger(LogtubeTest.class);
logger.keyword("WelcomeController", "SOMETHING").info("hello world");
logger.info().message("GET http://example.ms.com/api/get").commit();
logger.info().extras("key1", "val1", "key2", "val2").message("hello world").commit();
- 使用 Logtube 静态方法
Logtube 类中包含所有以上提及的静态方法。
使用内建过滤器
Logtube 内置一些常用的过滤器和工具,先前使用 XLog 的用户需要更新类名和引用
XLog类名 | Logtube类名 |
---|---|
net.landzero.xlog.druid.XLogFilter | io.github.logtube.druid.LogtubeDruidFilter |
net.landzero.xlog.dubbo.XLogConsumerFilter | io.github.logtube.dubbo.LogtubeDubboConsumerFilter |
net.landzero.xlog.dubbo.XLogProviderFilter | io.github.logtube.dubbo.LogtubeDubboProviderFilter |
net.landzero.xlog.http.XLogFilter | io.github.logtube.http.LogtubeHttpFilter |
net.landzero.xlog.mybatis.XLogInterceptor | io.github.logtube.mybatis.LogtubeMybatisFilter |
net.landzero.xlog.perf.XPerf | io.github.logtube.perf.XPerf |
net.landzero.xlog.redis.XLogJedis | io.github.logtube.redis.LogtubeJedis |
net.landzero.xlog.redis.XLogJedisPool | io.github.logtube.redis.LogtubeJedisPool |
net.landzero.xlog.redis.XLogJedisCluster | io.github.logtube.redis.LogtubeJedisCluster |
net.landzero.xlog.XLog | io.github.logtube.Logtube |
net.landzero.xlog.constants.Constants | io.github.logtube.LogtubeConstants |
获取 CRID
XLog | Logtube | |
---|---|---|
获取 CRID | XLog.crid() | Logtube.getProcessor().getCrid() |
HTTP Header 常量 | XLogFilter.HTTP_CRID_HEADER | LogtubeConstants.HTTP_CRID_HEADER |