使用tinylog 1.0简化您的日志记录

tinylog的大小仅为75 KB,是广泛使用的经典日志记录框架Log4j和Logback的轻型替代方案。 经过三年的开发,最终版本1.0刚刚于 3月底发布 。 在几个设计问题中,tinylog采取了与Java中经典日志记录框架完全不同的方法。 本文将介绍与Log4j和Logback的区别和相似之处,并在tinylog中进行简要介绍。

静态记录器

通常,对于每个使用日志记录的类,都必须创建自己的记录器实例。 所有这些记录器都按层次结构命名,通常使用完全限定的类名。 在SLF4J(Logback的日志记录API)以及Log4j 1.x中,必须显式传递类名:

public class MyClass {private static final Logger logger = Logger.getLogger(MyClass.class);}

与常规工作一样,记录器的创建通常是从其他类中复制的。 但是在这种情况下,很容易忘记更改class参数,这可能导致错误的日志条目。 为避免此类问题,Log4j 2.x能够自行检测该类。 不再需要将类名作为参数传递。 tinylog更进一步,并且不再需要为每个类创建自己的记录器实例。 相反,tinylog具有静态记录器,可以在其上直接调用所有记录方法:

public class Application {public static void main(String[] args) {Logger.info("Hello {}!", args[0]);}}

组态

可以通过三种方式配置tinylog:通过属性文件,通过系统属性(可以设置为“ -D”参数)和通过流畅的API编程。 配置在运行时可以更改,并且始终始终设置为原子。 对于生产环境,建议将名称为“ tinylog.properties”的属性文件放入默认包中。 如果未明确指定其他配置,tinylog将默认加载此属性文件。

屏幕截图

缺省情况下,tinylog仅输出日志级别为info或更高的日志条目。 所有其他将被丢弃。 特别是对于开发环境,更改全局日志记录级别以进行调试以及更改某些软件包或类来进行跟踪是有意义的。 具有定义的日志格式和日志记录级别的属性文件可能类似于以下示例:

tinylog.level = debug
tinylog.level@com.example = trace
tinylog.format = {level}: {class}.{method}()\t{message}

伐木作家

tinylog默认将所有日志条目写入控制台。 可以通过定义另一个编写器来覆盖此默认行为。 除了写入控制台外,还支持写入文件和SQL数据库。 tinylog具有三种不同的写入文件的编写器: FileWriterSharedFileWriterRollingFileWriterFileWriter将日志条目写入定义的日志文件。 例如,可以通过以下方式在属性文件中定义它:

tinylog.writer = file
tinylog.writer.filename = log.txt

SharedFileWriter工作方式与FileWriter相同,但是支持将应用程序的多个实例同时记录到同一日志文件中,而不会发生任何冲突。 RollingFileWriter允许在重新启动应用程序后继续现有的日志文件。 可以通过策略指定何时必须启动新的日志文件。 可以将定义数量的旧日志文件存储为备份。 在此示例中,每天将启动一个新的日志文件,并且最近7天的日志文件将作为备份存储,并以时间戳记命名:

tinylog.writer = rollingfile
tinylog.writer.filename = log.txt
tinylog.writer.policies = daily
tinylog.writer.backups = 7
tinylog.writer.label = timestamp

性能

通常,每个日志条目的日志记录成本仅为几纳秒。 但是,可以通过几种选择来提高速度。 最有效的方法是通过设置属性“ tinylog.writer.buffered=true ”并通过“ tinylog.writingthread=true ”激活写入线程来启用缓冲写入,以避免主应用程序被缓慢的IO操作阻塞。 但是两者都有一个缺点,就是在JVM崩溃后,最后一个日志条目(因此也是最重要的日志条目)可能会丢失。

特别是对于大型项目,通常将类和方法名称与每个日志条目一起输出,以简化查找相应代码的过程。 但是Log4j和Logback警告说,这将导致性能损失,因为此类堆栈跟踪信息的生成非常昂贵。 由于其体系结构,tinylog始终知道堆栈跟踪中调用者的确切深度。 因此,tinylog可以仅提取单个所需的堆栈跟踪元素,而不必生成整个堆栈跟踪。 这样可以使记录速度加快多次,而无需放弃重要的堆栈跟踪信息。

结论

本文可能仅在tinylog中进行简要介绍。 可以在tinylog网站上找到所有配置参数的完整手册 。 tinylog是根据Apache License 2发布的 ,因此可以在开源以及商业项目中使用。 还有Log4j 1.x的外观和SLF4J的绑定以简化迁移。 除其他功能外,还计划在即将发布的版本中包括用于写入的包含和排除以及用于通过邮件发送日志的MailWriter

翻译自: https://www.javacodegeeks.com/2015/04/simplify-your-logging-with-tinylog-1-0.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华谊兄弟出现什么问题_什么是语言训练?这就要从语言问题的出现说起了

开口、发音是每一个孩子在语言发展过程中所不可少的经历,他们从周围环境中获取到的各种信息转化为想要表达的内容。虽然一开始孩子的语言并没有成年人那么流畅和准确,但随着时间的推移,他们的说话发音愈发成熟。只是,并不是所有孩…

【算法提升—力扣每日一刷】五日总结【12/18--12/22】

文章目录 2023/12/18LeetCode每日一刷:[20. 有效的括号](https://leetcode.cn/problems/valid-parentheses/) 2023/12/19LeetCode每日一刷:[150. 逆波兰表达式求值(后缀表达式运算)](https://leetcode.cn/problems/evaluate-rever…

CompletableFuture不能被打断

我已经写了很多有关InterruptedException和中断线程的文章 。 简而言之,如果您没有Future.cancel()调用Future.cancel()那么Future将终止待处理的get() ,但还将尝试中断基础线程。 这是一个非常重要的功能,可以更好地利用线程池。 我还写信总…

crio电压采集 labview_NI cDAQ917采集温度方法

NI cDAQ-9171是一款由总线供电的单槽NI CompactDAQ USB机箱,适合较小的便携式传感器测量系统。cDAQ-9171可与50多款专用测量模块配合使用,用于构建模拟输出、数字I/O或计数器/定时器测量系统。这些模块适用于各种传感器测量,包括热电偶、RTD、…

android finish 区别,Android Activity类finish、onDestory和System.exit介绍

image.pngfinish函数Activity.finish()Call this when your activity is done and should be closed.在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。当调用此方法的时候,系统只是将最上面的Activity移出了栈&#xf…

在JVM中记录世界停顿

不同的事件可能导致JVM暂停所有应用程序线程。 这种暂停称为世界停止(STW)暂停。 触发STW暂停的最常见原因是垃圾回收( 例如github中的示例 ),但是不同的JIT操作( 示例 ),偏向锁吊销…

jOOQ与Hibernate:何时选择哪个

Hibernate已成为Java生态系统中的事实上的标准,事实上, 如果标准对您很重要 ,并且如果您将JCP与ISO,ANSI,IEEE等置于同一级别,那么Hibernate也是实际的JavaEE标准实现。 本文的目的不是讨论标准&#xff0…

linux怎么才能算telnet成功_怎么表白才算成功呢

要怎样表白才算成功呢?其实如果对方也有点喜欢你的,对你有点感觉的,不管怎样表白,你都会成功的,相反,如果对方本身就对你没感觉的,不管你要怎么轰轰烈烈的表白,你都不会成功。下面&a…

我们真的仍然需要32位JVM吗?

即使到了今天(2015年),我们仍然有两个版本或Oracle HotSpot JDK –已调整为32或64位体系结构。 问题是我们是否真的想在服务器甚至笔记本电脑上使用32位JVM? 我们应该有很受欢迎的意见! 如果只需要较小的堆&#xff0c…

html js点击字图片下拉,JavaScript实现文字与图片拖拽效果的方法

本文实例讲述了JavaScript实现文字与图片拖拽效果的方法。分享给大家供大家参考。具体实现方法如下:JavaScript实现文字与图片的拖拽效果*{padding:0;margin:0;}.tips{position:absolute;background:#eee;}图片可以拖动脚本之家拖动链接也可以var $idfunction(id){r…

html设置页面的高度和宽度,web显示页面有图像上设置高度和宽度很重要

因此即使浏览器只有HTML,它仍然能够分配适当的空间。所以我们可以修改成以下内容:最近我们发现谷歌浏览器对图片设置有一定的修改,它主要在图像上进行设置width和设置height属性,以防止布局发生变化并改善网站访问者的体验。Web性…

磁盘空间管理工具FolderSizes

现在的硬盘已经到了用TB来计量的级别,但也会感觉在不知不觉间空间竟然不够用了!到底什么东西占用了我们这么多的磁盘空间呢? 这个软件可以帮你快速进行分析。FolderSizes 企业版是一款优秀的磁盘管理工具,它可以有效地帮助我们快速的查看并统…

vscode修改python终端_panda3d是python的一个高级的3D 渲染和游戏开发框架

1 介绍1.1 开发维护者:迪士尼VR工作室和卡耐基梅隆娱乐技术中心。1.2 是一个3D游戏引擎和一个 3D 渲染和游戏开发库。1.3 可以在这个框架下使用 Python 和 C 。1.4 Panda3D 是开源软件, 它的许可证让它可以用于任何用途, 包括商业用途。1.5 是python的三…

HTMl和css项目总结,HTML+CSS项目开发总结

好几天没更新博客了,刚实战完一个HTMLCSS的简单项目。经过几天的摸索,发现收益良多。之前只是单纯得写demo,看知识点,没有亲自实战项目。但实战过后才会了解,如何才能更好地提升自己的技术。针对这次项目开发&#xff…

HDU--4768

题目&#xff1a; Flyer 原题链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid4768 分析&#xff1a;二分。只需要注意到最多只有一个为奇数&#xff0c;则可以首先求出学生获得的总的传单数&#xff0c;为奇数时&#xff0c;二分找到答案。 1 #include<cstdio&…

js return的值取不到_【JS基础】隐式转换(一)

开篇JS作为一门动态语言十分灵活&#xff0c;但是伴随而来的弱类型隐式转化的问题让我们十分头疼。隐式作为一个大课题&#xff0c;很难用一个很简短的篇幅把JS的隐式转换讲解的十分清楚。所以我选择用多次少量的策略进行梳理&#xff0c;争取让你每看完一篇都会有加深对于JS隐…

语句 查询每个人每个科目的最高分_转行数据分析师专栏(SQL篇)-05多表查询...

数据表&#xff08;4张&#xff09;及数据情况&#xff1a;搭建数据表数据参考&#xff1a;空杯希望&#xff1a;转行数据分析师专栏&#xff08;SQL篇&#xff09;-01SQL入门​zhuanlan.zhihu.com一、表的加法1、先新建一个表course1&#xff08;和course表数据结构一致&#…

plsql 设置鼠标行执行_如何制作键盘鼠标产品质量合格证

鼠标前盘属于办公用品套装&#xff0c;一般会一起销售&#xff0c;但是也不排除分开销售&#xff0c;无论是哪种方式键盘鼠标在生产销售时都需要携带对应产品质量合格证&#xff0c;对产品进行简单的说明&#xff0c;更能保障消费者的权益。那么如何制作产品质量合格证呢&#…

第四章例4-2

/* 输入一批学生的成绩&#xff0c;以负数作为结束标志&#xff0c;计算平均成绩&#xff0c;并统计不及格人数 */ #include<stdio.h> int main(void) {int count,num;double grade,total;num0;total0;count0;printf("Enter grades:");scanf_s("%lf"…

html.action 访问分部视图,MVC+EF 随笔小计——分部视图(Partial View)及Html.Partial和Html.Action差异...

Partial View指可以应用于View中以作为其中一部分的View的片段(类似于之前的user control), 可以像类一样&#xff0c;编写一次&#xff0c; 然后在其他View中被反复使用。一般放在"Views/Shared"文件夹中以共享。创建Partial View&#xff1a;一般直接右键"Vie…