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具有三种不同的写入文件的编写器: FileWriter
, SharedFileWriter
和RollingFileWriter
。 FileWriter
将日志条目写入定义的日志文件。 例如,可以通过以下方式在属性文件中定义它:
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