Tinylog 1.2如何简化日志记录


现在几乎每个专业的Java应用都在使用日志。最常见的日志框架是Log4j和Logback。tinylog是一个轻量级的选择。它只有94KB的大小,并试图简化日志记录和配置。在简短介绍tinylog之后,将通过示例展示1.2版的新特性。

日志API

tinylog有一个静态记录器类。因此,没有必要为每个类创建一个日志记录程序的实例,应该在其中使用日志记录。只需写下您的日志声明:

import org.pmw.tinylog.Logger;

public class Application {

   public static void main(String[] args) {
      Logger.info("Hello World!");
   }

}

记录器接受普通对象、异常、字符串和带占位符的格式化消息。使用tinylog 1.2,可以格式化数字占位符。tinylog用于数值NumberFormat以同样的方式MessageFormat是的,但是语法更短:

MessageFormat.format("Price: {0,number,0.00} EUR", amount);
Logger.info("Price: {0.00} EUR", amount);

当然,这样的格式模式是可选的。如果没有定义格式模式,tinylog使用标准方式来格式化它们。ChoiceFormat可用于根据条件格式化值。

MessageFormat.format("Received {0,choice,0#nothing|1#a single message|1<{0} messages}", count);
Logger.info("Received {0#nothing|1#a single message|1<{} messages}", count);

配置

如果您开发一个Java EE应用程序,您可能想要使用您的应用程序或网络服务器的日志系统。在这种情况下,您可以使用tinylog-jboss对于Wildfly和JBoss EAP或tinylog-jul对于Tomcat和Glassfish。这些图书馆是真实的替代品tinylog JAR。它们提供相同的日志记录API,但是将所有日志条目重定向到服务器的底层日志记录系统,并且不需要配置。

tinylog本身可以通过属性文件、系统属性和/或流畅的Java API进行配置。在本文中,属性文件用于示例配置。Acomplete manual可以在上找到tinylog website

配置中最有趣的部分是如何配置编写器。tinylog可以将日志条目输出到控制台、文件、数据库和logcat。一个简单的文件编写器可能如下所示:

tinylog.writer = file
tinylog.writer.filename = ${home}/logs/dummy.log
tinylog.writer.format = [{level)] {class}.{method}() {message}

带有环境变量的类似Unix的占位符(${home}例如)将由tinylog在任何操作系统上自动解析。在1.2版本中,tinylog的JDBC编写器支持Java EE数据源,并在连接丢失的情况下自动重建数据库连接。自定义JDBC写入器配置示例:

tinylog.writer = jdbc
tinylog.writer.url = java:jboss/datasources/ExampleDS
tinylog.writer.reconnect = 60
tinylog.writer.table = LOG_ENTRIES_TABLE
tinylog.writer.columns = COLUMN_A, COLUMN_B
tinylog.writer.values = LEVEL, MESSAGE

tinylog 1.2中全新的是对Android开箱即用的全面支持。新的logcat编写器可以将所有日志条目重定向到logcat。与安卓相反Log classtinylog不需要标签。相反,它可以从类名中自动推断标签。当然,tinylog的所有其他作者都可以另外使用。logcat的配置可能如下所示:

tinylog.writer = logcat
tinylog.level = trace
tinylog.writer.format = {message}

如果您想以相同的方式配置多个Java程序,您可以在网络中提供一个全局属性文件。tinylog可以通过URL加载任何配置。网址可以定义为系统属性,例如:

-Dtinylog.configuration=http://192.168.0.1/tinylog.properties

性能

Log4j和其他日志框架警告输出位置信息,如方法名或行号。由于其体系结构,tinylog可以提取单个堆栈跟踪元素,而无需加载整个堆栈跟踪。那相当快。因此,没有性能原因来避免用tinylog输出位置信息。

如果日志记录性能对您很重要,您可能会对benchmark这将tinylog与Log4j和Logback进行了比较。开源benchmark program可针对定制用例进行调整。因此,您可以为您的个人用例找到最快的日志框架。

结论

这篇文章只能简单介绍一下tinylog。Acomplete manual所有配置参数都可以在tinylog上找到website。tinylog是在Apache许可证2下发布的,因此它可以在开源和商业项目中使用。还有一个facadeLog4j 1.x以及bindingsSLF4J和阿帕奇社区伐木公司。