当前位置:Gxlcms > 数据库问题 > 手把手教你完成MaxCompute JDBC自定义日志配置

手把手教你完成MaxCompute JDBC自定义日志配置

时间: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);
  1. 配置说明

接着我们来看看 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   

人气教程排行