当前位置: 首页 > news >正文

Tinylog

Tinylog 是一个专为 ​​Java、Kotlin、Scala 和 Android​​ 设计的轻量级日志记录框架,其核心目标是提供一种​​高效、简洁且易于集成​​的日志解决方案。它的设计哲学围绕“轻量”与“高性能”展开,核心库体积极小(仅约 105KB),且不依赖第三方库,仅需 Java 标准库即可运行,显著降低了对应用资源的消耗。

1.在项目中引入 tinylog

<dependency><groupId>org.tinylog</groupId><artifactId>tinylog-api</artifactId><version>2.5.0</version>
</dependency>
<dependency><groupId>org.tinylog</groupId><artifactId>tinylog-impl</artifactId><version>2.5.0</version>
</dependency>

package com.mylog;
import org.tinylog.Logger; // 导入日志工具public class App {public static void main(String[] args) {Logger.info("我的第一条日志!"); // 输出一条信息日志}
}

日志的 5 个级别

学习 5 个级别(从 “不重要” 到 “很重要”):

  1. TRACE:最详细的记录(比如 “用户点击了按钮”)
  2. DEBUG:调试时用(比如 “变量 a 的值是 10”)
  3. INFO:普通消息(比如 “程序启动了”)
  4. WARN:警告(比如 “内存快满了”)
  5. ERROR:错误(比如 “文件找不到了”)
Logger.trace("这是TRACE日志");
Logger.debug("这是DEBUG日志");
Logger.info("这是INFO日志");
Logger.warn("这是WARN日志");
Logger.error("这是ERROR日志");

2.配置文件

src/main/resources文件夹右键→“New”→“File”,文件名填tinylog.properties

writer = console
writer.format = 【{date:HH:mm:ss}】{level}: {message}

运行App.java,观察日志格式变成:【15:30:20】INFO: 这是INFO日志

除了 properties,还能用 XML 配置日志(结构更清晰)

<?xml version="1.0" encoding="UTF-8"?>
<configuration><writer name="console"><format>{date} [{level}] {message}</format></writer>
</configuration>

a.同时输出到控制台和文件

修改tinylog.properties,用writer1writer2配置多个输出目标.

properties

# 第一个输出:控制台
writer1 = console
writer1.format = [{level}] {message}# 第二个输出:文件
writer2 = file
writer2.filename = logs/double.log
writer2.format = {date} {message}

运行代码,验证:控制台有日志,logs/double.log文件里也有日志

b.设置全局日志级别

writer = console
level = debug  # 只显示debug及以上级别(trace不显示)

再把level改成warn,运行后发现:只有 WARN 和 ERROR 显示

c.给特定代码包设置不同级别

src/main/java/com/mylog下新建一个service文件夹,里面创建UserService.java

package com.mylog.service;
import org.tinylog.Logger;public class UserService {public void login() {Logger.debug("用户登录了(来自UserService)");}
}

App.java里调用这个类:

new com.mylog.service.UserService().login();

修改tinylog.properties,给service包单独开 DEBUG 级别:

writer = console
level = info  # 全局默认info
level.com.mylog.service = debug  # service包用debug

运行后观察:UserService的 DEBUG 日志能显示,App的 DEBUG 日志不显示

3.滚动日志

 “滚动日志” 是解决 “日志文件太大” 的办法.

想象:如果日志一直写在一个文件里,一年后文件会有 1GB,打开很慢. 滚动日志的解决思路:文件满了自动换一个新文件,就像 “作业本写满换一本”.

配置 “文件到 1MB 就自动换新文件”

writer = rolling file
writer.filename = logs/roll.log  # 主文件
writer.size = 1MB  # 达到1MB就换新文件
writer.format = {message}

写循环代码生成大量日志(让文件超过 1MB)

for (int i = 0; i < 10000; i++) {Logger.info("这是第" + i + "条日志,用来测试滚动");
}

运行后查看logs文件夹:会生成roll.log(当前文件)和roll_1.log(满了的旧文件)

a.限制滚动日志的备份数量

控制 “最多保留多少个旧日志文件”(避免占满硬盘)

修改tinylog.properties,按日期滚动:

writer = rolling file
writer.filename = logs/day.log
writer.pattern = logs/day_{date:yyyyMMdd}.log  # 旧文件名包含日期
writer.rolling = daily  # 每天滚动一次

运行代码生成日志,当前文件是day.log

b.按小时自动滚动(每小时一个文件)

writer = rolling file
writer.filename = logs/hour.log
writer.pattern = logs/hour_{date:yyyyMMdd_HH}.log  # 包含小时(HH)
writer.rolling = hourly  # 每小时滚动

4.用参数化日志避免字符串拼接

更简洁的日志写法,提高性能,把App.java里的日志都改成参数化写法

Logger.info("用户名为:{},年龄为:{}", name, age); // 简洁

记录异常(错误堆栈信息)

App.java里写一段会出错的代码(比如除以 0)

try {int a = 10 / 0; // 这里会报错
} catch (Exception e) {// 记录异常:第一个参数是异常对象,第二个是消息Logger.error(e, "计算时出错了");
}

运行代码,观察日志:会显示错误消息 + 详细的错误位置(哪一行代码出错)

尝试删除e参数,对比:只显示消息,没有错误位置(不好排查问题)

http://www.dtcms.com/a/316480.html

相关文章:

  • 通俗版23种设计模式解析
  • 机械手的眼睛,视觉系统如何让机器人学会精准抓取
  • GaussDB 常见问题-集中式
  • 05-栈 stack
  • 机器学习算法系列专栏:决策树算法(初学者)
  • TCP如何实现可靠传输?实现细节?
  • 三坐标测量技术解析:从基础原理到斜孔测量难点突破
  • 重生之我在暑假学习微服务第十天《网关篇》
  • Mysql常用语句
  • 广州客户 戴尔R720服务器 liunx系统 RAID5无损升级扩容
  • CTF-XXE 漏洞解题思路总结
  • AI自主任务执行系统 AI Agent无限循环,发任务给AI,让生成脚本,运行执行任务,直到成功。
  • adjtimex系统调用及示例
  • 阿里招AI产品运营
  • 从数据洪流到智能决策:Apache IoTDB如何重塑工业物联网的DB+AI新范式
  • Java技术栈/面试题合集(12)-Maven篇
  • springboot + maven 使用资源占位符实现动态加载配置文件
  • 跳表和B+树的相似和区别 ***
  • Nginx 学习
  • UnityUI系统--GUI
  • PHP‑ORT扩展构建纯PHP机器学习的推荐系统
  • Redis协议数据迁移方式
  • 聚焦智能穿戴“下一代消费终端”之争,Meta/微美全息借AI+AR积淀定义行业未来
  • Tasks and Deadlines(Sorting and Searching)
  • 【人工智能-18】机器学习:决策树、随机森林
  • 什么情况下浮动IP(Floating IP)会“漂移”(Drift)
  • 浮动IP(Floating IP)的删除通常需要满足什么条件
  • 小程序点击菜单栏实现样式动态切换
  • 对于包含大量文件的程序的便捷makefile操作
  • RK3568 Linux驱动学习——字符设备驱动开发