时间:2021-07-01 10:21:17 帮助过:25人阅读
你可以采用两种方式来指定配置文件,一种是直接将logback.xml放入classpath之中。
还有一种方式是以编程的方式,在如下的config中加入了 log_conf_file 属性的配置或是在jdbc URL串中带上 log_conf_file 参数来指定(见之前SQL Workbench/J的示例图)。当你同时在URL和config中配置该项时,以config的值作为优先项使用。
Properties config = new Properties();
config.put("access_id", "...");
config.put("access_key", "...");
config.put("project_name", "...");
config.put("charset", "...");
config.put("log_conf_file","/Users/emerson/logback.xml");
Connection conn = DriverManager.getConnection("jdbc:odps:<endpoint>", config);
接着我们来看看 logback.xml 的内容:
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<!--*Linux or Windows:*-->
<!--tries $HOME first; if it doesn‘t exist, it tries $USERPROFILE-->
<file>${HOME:-${USERPROFILE}}/logs/odps.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} %X{connectionId} [%file:%line] %msg%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<logger name="com.aliyun.odps.jdbc" level="debug"/>
<root level="error">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
这是一个满足基本常规需求的logback配置,如果你没有更多的特殊需求,可以直接复制该配置文件来使用。我将简单对该配置做一下介绍,如果你对logback的配置想要有更深入的了解,请查看官方文档的configuration章节。
其中<configuration>
是配置文件的根标签,所有子标签必须包含在根标签之中。其中子标签分为<appender>
、<encoder>
、<logger>
和 <root>
。
Logback 的日志实例是有继承关系的。其中 <root>
就是所有日志实例的父实例,而其余 <logger>
都是子实例,默认都继承父实例的配置。而所有的 <logger>
又根据其 name
属性的前缀来继续维持继承关系,假设这段配置中定义了com.aliyun.odps
和 com.aliyun.odps.jdbc
两个日志实例,那后者就是前者的子实例。由于我们目前只有com.aliyun.odps.jdbc
这个包中有输出日志的代码,所以我们只配置了一个日志实例,它覆盖了 <root>
的 error
日志级别,改为了 debug
级别。
其中日志的输出级别及其严重等级关系为:
TRACE < DEBUG < INFO < WARN < ERROR < OFF
即从左往右的严重等级依次递增,日志数量则依次递减。严重等级越小的日志级别将输出所有大于等于它级别的日志。举个例子,如果你选择DEBUG
级别,那除TRACE
之外的所有日志都将输出。其中OFF
表示不输出日志。
其中的 <encoder>
用于将日志事件编码成字节流,它引用了 <pattern>
,<pattern>
表明使用默认的PatternLayout
,其中<pattern>%date %level [%thread] %logger{10} %X{connectionId} [%file:%line] %msg%n</pattern>
中引用了很多PatternLayout
中内置的一些变量,用于分别输出日志的日期、级别、线程名、日志实例名、connectionId、类文件、行号、msg信息以及行分隔符。其中更多的内置变量请参阅官方的layouts文档。
这些变量中唯一需要你特别关注的是 %X{connectionId}
,这是一个通过 MDC 设置的每个JDBC Connection唯一的ID,用于标识来自于同一Connection的JDBC日志。
而<appender>
用于指定日志的输出目标,目前的示例中配置了 FILE
和 STDOUT
两个appender,表明分别将日志输出到文件和标准输出流,其中FILE
的appender中又通过 <file>
指明了日志文件的存储路径。
最后我们可以看到日志实例会引用appender,而appender又会引用encoder,从而构造了整个日志配置的体系。
通过以上配置,我们可以在路径/Users/emerson/odps.log下(也就是你的home目录下,上述配置示例中针对Linux和windows的home目录做了兼容)得到格式如下的输出日志:
Logback 是一款相当强大的Java日志框架,你可以通过配置来获取像日志文件rotation、归档,甚至以JMS、邮件方式输出日志等功能。更多的功能请查阅官方文档来获取进一步了解。
欢迎加入MaxCompute钉钉群讨论
阅读原文请点击
手把手教你完成MaxCompute JDBC自定义日志配置
标签:依赖 info log4j trace 代码 数据查询 jms 相关配置 workbench