玩转苍穹日志输出方法
苍穹采用Logback开源日志组件,相比log4j,logback不仅性能提升了,初始化内存加载也更小了。
苍穹的日志输出是在mc管理中心进行配置,一般是在公共配置项配置log.config值。如果多个环境可在集群管理覆写。
苍穹日志滚动方式
基于时间滚动
每次只能生成一个文件,比如时间到天的话,每天只能生成一个文件。无论一个文件有多大,都只会输出到这一个文件中去,对于比较关注日志,每天需要备份日志文件的客户比较适合。
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/tlog.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- compress file like xxxx.log.zip --> <fileNamePattern>${LOG_HOME}/log.%d{yyyy-MM-dd-HH-mm}.log</fileNamePattern> <!-- keep 30 days' worth of history --> <maxHistory>30</maxHistory> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> <encoder> <pattern>%msg%n</pattern> </encoder> </appender>
基于窗口滚动--(推荐使用)
每次文件达到一定大小时会截断日志并将其压缩打包,然后根据设置的保留数据进行窗口滚动。这样日志自动清理就能避免因日志过大将磁盘空间撑满的问题。
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/log.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${LOG_HOME}/log.%i.log.gz</fileNamePattern> <minIndex>1</minIndex> <maxIndex>20</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>10MB</maxFileSize> </triggeringPolicy> <encoder> <pattern> %date [%thread] %-5level %logger{50} [%file:%line] %msg%n </pattern> </encoder> </appender>
日志输出级别
日志输出级别有:INFO、ERROR、WARNING、DEBUG
苍穹默认INFO级别是将所有的级别日志都输出出来的。可以通过 filter 来输出特定级别的日志。如:
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印INFO日志 --> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter>
日志输出路径
日志输出路径有:
kafka:苍穹将日志生产消息至kafka,由logstash消费kafka中的日志消息,再输出到elasticsearch进行存储。而苍穹monitor的日志查询是从elasticsearch中查看日志
file:输出到本地文件,默认路径在 mservice/logs下。
stdot:默认非容器化部署是写入到std.out文件中,容器化部署是输出到控制台日志中
本地开发环境的同学是不是经常有这样的困扰,日志控制台处经常刷屏报连不上kafka错误日志,使得本地调试起来经常看不到日志。为解决本地环境控制台总是抛出kafka连接错误日志而干扰日志分析,可以通过覆写log.config值使本地环境日志只输出到控制台,而不连接kafka。配置方法参考如下:
System.setProperty("log.config","<?xml version=\"1.0\" encoding=\"UTF-8\" ?><configuration><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><root level=\"INFO\"><appender-ref ref=\"stdot\" /></root></configuration>");
日志转换长度
通过%logger控制输出日志事件长度,如下:
%logger | mainPackage.sub.sample.Bar | mainPackage.sub.sample.Bar |
%logger{0} | mainPackage.sub.sample.Bar | Bar |
%logger{5} | mainPackage.sub.sample.Bar | m.s.s.Bar |
%logger{10} | mainPackage.sub.sample.Bar | m.s.s.Bar |
%logger{15} | mainPackage.sub.sample.Bar | m.s.sample.Bar |
%logger{16} | mainPackage.sub.sample.Bar | m.sub.sample.Bar |
%logger{26} | mainPackage.sub.sample.Bar | mainPackage.sub.sample.Bar |
扩展案例
不同级别的日志输出到不同文件
核心配置:
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印ERROR日志 --> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter>
如下:将info输出到log-info.log中,将error日志输出到log-error.log中
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/log-error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${LOG_HOME}/log-error.%i.log.gz</fileNamePattern> <minIndex>1</minIndex> <maxIndex>20</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>10MB</maxFileSize> </triggeringPolicy> <encoder> <pattern> %date [%thread] %-5level %logger{10} [%file:%line] %msg%n </pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印ERROR日志 --> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/log-info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${LOG_HOME}/log-info.%i.log.gz</fileNamePattern> <minIndex>1</minIndex> <maxIndex>20</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>10MB</maxFileSize> </triggeringPolicy> <encoder> <pattern> %date [%thread] %-5level %logger{10} [%file:%line] %msg%n </pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印INFO日志 --> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <root level="INFO"> <appender-ref ref="kafka" /> <appender-ref ref="error" /> <appender-ref ref="info" /> </root>
最后有兴趣的同学可以深入研究logback的更多用法:
http://logback.qos.ch/manual/layouts.html#ClassicPatternLayout
玩转苍穹日志输出方法
本文2024-09-23 01:14:16发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144660.html
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf