
# 1 简介
苍穹平台提供了一套统一的日志处理接口,并使用LogbackFactory为默认的日志工厂类,调用Slf4JLogger组件来实现日志操作。同时还提供给使用者自定义的日志工厂,只需要自定义LogFactory即可。
**日志级别**
+ debug (最低)
+ info
+ warn
+ error (最高)
开启某个级别的日志,则当前及比它更高的级别的日志将被输出。例如:设置日志级别为warn,则将输出warn和error日志。
# 2 应用场景
任何需要记录日志的的场景。
# 3 接口说明
日志相关接口定义和实现存在于bos-log-1.0.jar中。对于使用者来说只需要调用kd.bos.logging.LogFactory获取Log对象,然后调用Log对象的接口方法即可。
## 3.1 接口列表
***LogFactory***
| 静态方法 | 说明 |
| - | - |
| getLog | 获取Log日志对象 |
***Log***
| 接口方法 | 说明 |
| - | - |
| isDebugEnabled | debug级别日志是否开启 |
| isInfoEnabled | info级别日志是否开启 |
| isWarnEnabled | warn级别日志是否开启 |
| isErrorEnabled | error级别日志是否开启 |
| debug | 输出调试信息 |
| info | 输出应用信息 |
| warn | 输出警告信息 |
| error | 输出错误信息 |
## 3.2 使用示例
```java
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
// 创建logger
private final static Log logger = LogFactory.getLog("name");
// 或
private final static Log logger = LogFactory.getLog(XXX.class);
// 使用
if (logger.isDebugEnabled()) {
logger.debug("Debug info...");
}
```
> 输出日志一定要先判断logger.isXXXEnabled(),以减少开销。只需要判断当前记录日志的级别释放开启,如使用logger.debug,只需要判断isDebugEnabled。
# 4 注意事项
## 4.1 集群环境日志配置
通过配置中心设置,配置key为: log.config,如下图:
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<property name="LOG_HOME" value="../logs"/>
<appender name="metric" class="kd.bos.metric.instruments.logback.MetricAppender">
</appender>
<appender name="stdot" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss} [%thread] %level %logger.%M\(%L\):%m%n</pattern>
</layout>
</appender>
<appender name="kafka" class="kd.bos.logging.console.slf4j.logback.KafkaAppender">
<topic>{{clusterName}}-log</topic>
<brokerList>{{log.kafka.ip_port}}</brokerList>
<compressionType>none</compressionType>
<syncSend>false</syncSend>
<keySerializerClass>org.apache.kafka.common.serialization.StringSerializer</keySerializerClass>
<valueSerializerClass>org.apache.kafka.common.serialization.StringSerializer</valueSerializerClass>
</appender>
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/log.%d{yyyy-MM-dd}(%i).log</FileNamePattern>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<maxHistory>5</maxHistory>
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<MaxFileSize>10MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<charset>utf-8</charset>
<pattern>%d{HH:mm:ss} [%thread] %level %logger.%M\(%L\):%m%n</pattern>
</encoder>
<append>false</append>
<prudent>false</prudent>
</appender>
<logger name="org.apache" additivity="false" level="ERROR">
<appender-ref ref="stdot" />
</logger>
<logger name="org.javaswift.joss.command.impl.core.AbstractCommand" additivity="false" level="OFF">
<appender-ref ref="stdo