跳转至

使用java.util.logging进行记录

使用java.util.logging进行记录

总览

SeaboxSQL JDBC驱动程序支持使用日志记录(或跟踪)来帮助解决在应用程序使用SdJDBC驱动程序时遇到的问题。

SdJDBC驱动程序使用自JDK 1.4起Java自带的java.util.logging日志API,对驱动程序来说是个不错选择,因为它没有为日志记录框架添加任何外部依赖项。java.util.logging是一个非常丰富而强大的工具,本文无法相近解释或极少如何充分利用它的潜力,请参阅Java Logging Overview。

此日志记录支持是自SdJDBC驱动程序的42.0.0版以来添加的,并且以前的版本使用自定义机制来启用日志记录,而在当前版本中使用Java.util.logging代替了它,因此旧机制不再可用。

请注意,虽然大多数人使用Logging Framework很长时间了,但是此日志系统主要是为了调试驱动程序本身,而不是用于常规sql查询调试。

配置

日志API提供了静态和动态配置控制。静态控制使现场服务人员可以设置特定的配置,然后重新登录应用使新的日志设置生效。动态控制允许改变当前正运行的程序中的日志记录配置。

作为SdJDBC驱动程序中日志记录框架支持的一部分,需要使用连接属性来启用Logger,该属性使用静态控制来启用驱动程序中的跟踪操作。请记住,如果您使用应用程序服务(Tomcat,JBoss,WildFly等),则应使用它们提供的功能来启用日志记录,因为大多数应用程序服务都使用动态配置控制,该方式易于在执行时对启用/禁用日志进行控制。

SdJDBC驱动程序使用的根记录器是com.seaboxsql。

通过连接属性启用日志

驱动程序提供了使用连接属性启用日志记录的便捷方式,它的功能不如使用logging.properties文件丰富,因此应在真正调试驱动程序时使用。

这些属性是loggerLevel和loggerFile:

loggerLevel

驱动程序的记录器级别。允许的值:OFF,DEBUG或TRACE。

此选项可以控制 java.util.logging.Logger级别如下表所示:

loggerLevel java.util.logging
OFF OFF
DEBUG FINE
TRACE FINEST

如前所述,此方法不支持其他级别。并且在内部,驱动的日志记录程序级别(大部分情况下)不应使用其他级别,因为其目的是调试驱动程序,并且在某些应用程序启动全局调试时不干扰更高级别的调试行为。

loggerFile

输出日志文件的名称

如果设置了,则Logger将使用java.util.logging.FileHandler写入指定的文件。 如果未设置参数或无法创建文件,则将改用java.util.logging.ConsoleHandler。

此参数应该与loggerLevel一同使用。

下面时如何通过连接属性打开日志的例子:

jdbc:seaboxsql://localhost:5432/mydb?loggerLevel=DEBUG
jdbc:seaboxsql://localhost:5432/mydb?loggerLevel=TRACE&loggerFile=sdjdbc.log
通过使用logging.properties文件启用日志记录

默认的Java日志记录框架将其配置存储在名为logging.properties的文件中。 设置以点符号格式存储在每行中。尽管可以通过在启动Java程序时指定java.util.logging.config.file属性来使用单独的配置文件,但Java会在Java安装目录的lib文件夹中安装全局配置文件。logging.properties文件也可以创建并与单个项目一起存储。

以下是在logging.properties中进行设置的示例:

### Specify the handler, the handlers will be installed during VM startup.
handlers = java.util.logging.FileHandler

### Default global logging level.
.level = OFF

### Default file output is in user's home directory.
java.util.logging.FileHandler.pattern = %h/sdjdbc%u.log
java.util.logging.FileHandler.limit = 5000000
java.util.logging.FileHandler.count = 20
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.level = FINEST

java.util.logging.SimpleFormatter.format = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s %2$s %5$s%6$s%n

### Facility specific properties.
com.seaboxsql.level = FINEST

执行应用时可以传递系统属性:

java -jar -Djava.util.logging.config.file=logging.properties run.jar