vlambda博客
学习文章列表

数据库中间件DBLE学习(五) 学习配置log4j2.xml

前言

今天要去做大扫除。昨天跟朋友和同事聊起,他们都建议我:“你请个保洁不就好了吗?”。“买个扫地机器人。” 确实,用现代的方法很容易搞定这件事,也不用花时间。可是我还是买了400元左右的清洁工具。因为古人曾经说过:“一屋不扫,何以扫天下!”。这件事背后的哲学道理就是我们就是应该从小事做起, 合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。大扫除是次要,磨炼一下我才是认真的。

log4j2配置

dble使用 log4j2这个框架来记录日志, log4j2是log4j 1.x 的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,在异步方面的性能得到了巨大提升,除了提供Async Append异步实现外,还提供了Async Log异步实现。Async Append异步实现方式和logback的异步实现差不多。而Async Log基于 LMAX Disruptor库,实现了一个高性能的异步记录器。 LMAX Disruptorr是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题。
dble的log4j2配置比较简单。我们看下系统默认的demo配置。

 
   
   
 
  1. <RollingRandomAccessFile name="RollingFile" fileName="${sys:DBLE_HOME}/logs/dble.log"

  2. filePattern="${sys:DBLE_HOME}/logs/$${date:yyyy-MM}/dble-%d{MM-dd}-%i.log.gz">

  3. <PatternLayout>

  4. <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] (%l) - %m%n</Pattern>

  5. </PatternLayout>

  6. <Policies>

  7. <OnStartupTriggeringPolicy/>

  8. <SizeBasedTriggeringPolicy size="250 MB"/>

  9. <TimeBasedTriggeringPolicy/>

  10. </Policies>

  11. <DefaultRolloverStrategy max="100">

  12. <Delete basePath="logs" maxDepth="2">

  13. <IfFileName glob="*/dble-*.log.gz">

  14. <IfLastModified age="30d">

  15. <IfAny>

  16. <IfAccumulatedFileSize exceeds="1 GB" />

  17. <IfAccumulatedFileCount exceeds="10" />

  18. </IfAny>

  19. </IfLastModified>

  20. </IfFileName>

  21. </Delete>

  22. </DefaultRolloverStrategy>

  23. </RollingRandomAccessFile>

RollingRandomAccessFile标签。

这个标签代表了log4j2输出日志的一种方式(还有别的输出方式,例如控制台Console、文件File、Flume等等)。 RollingRandomAccessFile的原理是,将日志写入到文件,同时指定当文件达到一定大小(如250MB)时,重新生成一个文件继续写入日志,而之前的文件则进行归档。
RollingRandomAccessFile这种方式非常的实用,因为如果一直往一个文件中写,文件就会非常大,打开就会卡死,也不方便查询。如果一个日志高达20-30G,直接打开电脑就卡白屏了。

  • filename 指定当前日志文件的位置和文件名称

  • filePattern指定当发生Rolling时,文件的归档的路径和重命名的名字。

  • PatternLayout 控制台台或文件输出源(Console、File、RollingRandomAccessFile)都必须包含一个PatternLayout节点,用于指定输出文件的格式(如 日志输出的时间 文件 方法 行数 等格式)。例如:

 
   
   
 
  1. 2020-01-06 20:41:26.234 INFO [complexQueryExecutor5] (com.actiontech.dble.meta.ReloadLogHelper.info(ReloadLogHelper.java:58)) - DataNode[dn2]:Table[test_patternvalue] on resudelt true count is 1

  • Policies指定了策略,本例是大于250MB,就需要重新产生新的日志,并将之前的进行归档。还有其他的策略,例如时间等等。

DefaultRolloverStrategy标签

主要用作日志的滚动删除。

  • max 代表最大保存文件个数,此例是100个。

  • Delete标签指明删除, basePath代表了删除的基本路径,本例是在logs文件夹下面。而 maxDepth指明文件夹下的深度,这里是2层,1表示当前目录,2就表示当前目录的下一层目录。例如:/logs/2020-01文件夹下面的文件都会被扫描或是统计。

  • IfFileName标签的 glob指定了日志格式,所有扫描到的符合此命名规范的文件都被认为是日志文件

  • IfLastModifie标签里面的 age代表最后一次修改文件的时间,只有修改时间超过age的文件才会被考虑删除。age的单位:D、H、M、S,分别表示天、小时、分钟、秒。此处例子是30天。

  • IfAny标签:判断嵌套的condition是否有一个满足

  • IfAccumulatedFileSize 判断在遍历文件树的时候,文件的总大小是否超过了指定值,此处为1GB。

  • IfAccumulatedFileCount 判断在遍历文件树的时候,文件个数是否超过了指定值,此处为10。

上述整体连贯起来就是,监控logs目录下的第2层子目录,并且符合dble-.log.gz命名的,同时要求是修改时间已经超出30天的文件。先遍历出来。然后满足文件大小大于1GB或者文件数量大于10个目录会清理。

后记

今天学习的dble中的log4j2配置,如果想要更加复杂的设置,可以参考apache官网。[log4j2]https://logging.apache.org/log4j/2.x/manual/appenders.html