日志

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

日志

# 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="stdot" /> </logger> <logger name="kd.bos.dc.utils.AccountUtils" additivity="false" level="ERROR"> <appender-ref ref="kafka" /> </logger> <root level="INFO"> <appender-ref ref="kafka" /> </root> </configuration> ``` ## 4.2 自定义配置 在开发环境中,默认使用所在cluster的日志配置,也可以自定义配置。 在启动类(BosDebugInOne)中添加以下代码: ```java // 自定义日志 StringBuffer log = new StringBuffer(); Files.readAllLines(Paths.get(BosDebugInOne.class.getResource("/log.config.xml").toURI())).forEach(s -> log.append(s + "\n")); System.setProperty("log.config", log.toString()); ``` 修改日志配置内容: src\main\resources\log.config.xml ## 4.3 过滤输出内容 修改工程debug-bos-mservice中的类方法MyLogger.ignore: ```java /** * 如果要输出当前日志内容,返回false。 */ @Override protected boolean ignore(String level, String threadName, String loggerName, String msg) { if (!"DB".equals(loggerName)) { // 忽略 return true; } // 只输出DB日志 return false; } ``` ## 4.4 自定义日志工厂 ### 配置 请在MC中配置以下参数: | 属性 | 值 | 说明 | | - | - | - | | logfactory.className | com.xxx.MyLogFactory | 配置你开发的日志工厂实现类 | 在开发环境也可直接在启动类中配置。 ```java //配置你开发的日志工厂实现类,如:com.xxx.MyLogFactory System.setProperty("logfactory.className","com.xxx.MyLogFactory"); ``` ### 接口实现 实现LogFactory抽象类的_getLog()抽象方法即可: ```java public abstract class kd.bos.logging.LogFactory{ protected abstract Log _getLog(String clazzName); } ``` 创建MyLogFactory实现类,继承kd.bos.logging.LogFactory抽象类实现_getLog(String className)的逻辑: ```java //第1步:自定义日志工厂类(样例代码) public class MyLogFactory extends LogFactory{ private static final ConcurrentMap<String, MyLoggerImpl> logMap = new ConcurrentHashMap<String, MyLoggerImpl>(); @Override protected Log _getLog(String className) { MyLoggerImpl log = logMap.get(className); if(log==null) { log = new MyLoggerImpl(className); MyLoggerImpl oldLog = logMap.putIfAbsent(className, log); if(oldLog!=null) return oldLog; } return log; } } //第2步:实现日志操作类,要求实现kd.bos.logging.Log接口 public class MyLoggerImpl implements Log { //void debug(String msg); //void info(String msg); ... } ```

日志

# 1 简介苍穹平台提供了一套统一的日志处理接口,并使用LogbackFactory为默认的日志工厂类,调用Slf4JLogger组件来实现日志操作。同时还...
点击下载文档
上一篇:数据库访问下一篇:请求上下文
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息