拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 换掉 Log4j2!tinylog 横空出世,无需定义 logger 变量,简单、轻量、性能爆炸!

换掉 Log4j2!tinylog 横空出世,无需定义 logger 变量,简单、轻量、性能爆炸!

白鹭 - 2022-03-11 1924 0 0

背景

前段时间,日志框架各种爆雷,包括:Log4j 1.x, Log4j 2.x, Logback 等都有爆雷,几乎是团灭:

Log4j, Logback 都是主流的日志框架,功能也非常强大,不仅仅是日志记录,所以,功能多,自然也会带来更多的漏洞,,

其实我们使用日志框架,最多的还是记录系统日志,其他的乱七八糟的功能用的非常少,所以,如果你想寻求一款简单的日志记录框架,可以试试这款轻量级的开源日志框架——tinylog

tinylog

基本介绍

官方网站:

开源地址:

见名知义,tinylog 即:迷你日志,它的主要目标就是简化日志记录操作

支持的语言:

  • Java(Java 6+)
  • Kotlin
  • Scala
  • ...等其他 JVM 系语言(包括 Android)

支持的日志级别:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF(禁用日志输出)

轻量级

tinylog 主打轻量级,那么,tinylog 到底有多轻量??

堆栈长体验了一翻,总结了以下三点:

  • 仅有两个 jar 包,一个是 API,一个是实作,无任何其他依赖;
  • 两个 jar 包总大小仅为 178 KB
  • 无需全域静态变量,开箱即用;

来看 tinylog 的使用方式:

import org.tinylog.Logger; 

public class Application {     
	public static void main(String[] args) {        
		Logger.info("欢迎关注公众号:Java技术堆栈!");    
	}
}

这里就可以看到 tinylog 的优势了,不需要再添加像 logger 这样的全域静态变量了:

private final Logger logger = LoggerFactory.getLogger(this.getClass());

可以直接使用 Logger.info 等静态方法,也还能使用 {} 自变量占位符,不能太方便了!

另外,大家可以关注公众号Java技术堆栈,在选单栏查看堆栈长分享的往期系列 Java 精选好用技术及工具等,

日志性能

tinylog 对日志输出做了优化,日志输出性能更是十分了得,最快的时候甚至比 Log4j2 和 Logback 快数倍!

比如使用以下我们常用的格式输出日志:

tinylog 此时的性能真的吊打其他日志框架!

更多基准测验可以参考官方的报告:

这幺牛逼!大家想不想试试呢?

集成实战

1)引入依赖

我们只需要引入 tinylog-impl 即可:

<dependency>
    <groupId>org.tinylog</groupId>
    <artifactId>tinylog-impl</artifactId>
    <version>${tinylog.version}</version>
</dependency>

此时,其依赖的 API 包也会一起包含进来:

2)实战示例

堆栈长使用的是 Spring Boot,加一个 CommandLineRunner,可以直接让系统启动的时候输出日志:

@Bean
public CommandLineRunner commandLineRunner() {
    return (args) -> {
        Logger.info("hello, tinylog!");
    };
}

CommandLineRunner 不清楚的可以关注公众号Java技术堆栈,在选单栏阅读堆栈长写的系列 Spring Boot 教程,

不用在每个类中写 logger 全域变量,真爽,,

本文实战源代码完整版已经上传:

3)启动验证

现在我们来启动系统:

如图,系统在启动后输出了我们的日志,

4、更多配置

如果你想自定义日志配置,可以在资源目录下创建一个日志组态档:tinylog.properties

参考示例如下:

level            = INFO

writer1          = console
writer1.format   = {date: HH:mm:ss.SSS} {class}.{method}() {level}: {message}

writer2          = rolling file
writer2.file     = logs/{date: yyyy-MM-dd}/log_{count}.log
writer2.policies = startup, daily: 02:00
writer2.format   = {date: HH:mm:ss} [{thread}] {level}: {message}: {message}

此时日志级别为:info,创建了两个 writer,一个输出到控制台,一个写入档案,并每天按时进行日志切割归档,

更多的日志配置可以参考官方档案:

总结

tinylog 于 2014 年开源,到目前已经有快 8 个年头了,版本也是从 1.x 到如今的 2.x,最新版本为:2.4.1,并且 v2.5 也在路上了,从官方仓库看,更新频繁还挺高,

如果你想寻求一款简单的日志框架,tinylog 足够轻量,使用简单,性能牛逼,也是一个不错的选择,

可惜的是,tinylog 只是款小众日志框架,算不上主流,国内资料也还较少,所以,如果不是深度使用,倒是可以尝试,否则可能还有不少学习成本,大家还是要权衡利弊的,

本文实战源代码完整版已经上传:

欢迎 Star 学习,后面 Spring Boot 示例都会在这上面提供!

在座的各位有用 tinylog 的幺?欢迎留言分享~

最后,如果你想关注和学习最新、最主流的 Java 技术,可以持续关注公众号Java技术堆栈,公众号第一时间推送,

近期热文推荐:

1.1,000+ 道 Java面试题及答案整理(2022最新版)

2.劲爆!Java 协程要来了,,,

3.Spring Boot 2.x 教程,太全了!

4.Spring Boot 2.6 正式发布,一大波新特性,,

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *