完美实现ES自身sql日志输出

一个项目必须实现ES自身收到的SQL SELECT 命令的日志记录功能。

搜索网络,发现都是研究如何用ES结合python收集、分析其它数据库或者软件的日志。ES自身的日志如何控制反而说得特别少。
正常情况下,ES6.3 以上都可以支持SQL查询的。具体参见https://zhuanlan.zhihu.com/p/667510163《像mysql一样查询ES,一看就会,爽歪歪》,但是默认配置并不输出这些SQL命令日志。
进一步研究,弄明白ES日志内容主要靠 log4j2.properties配置来控制。
最重要是rootLogger.level = INFO 这一句,需要INFO改成DEBUG
问题是一旦这样修改,就导致日志量大的极其可怕,大到什么程度呢 ?我的笔记本虚拟机里面的单机ES,啥也不干,刚启动就是好几十M。执行一个SQL,日志上涨几千行。必须进行过滤。但是这个配置文件过滤的语法难住我了。很多网上文章都是不对路的,甚至错误的。
其实他支持 json、yaml、xml、peroperties四种模式,对于ES只有最后一种可以用的。百度的AI经常输出错误语法,误导我很多。总之填坑无数个,最后弄清楚
需要这样写:

1 rootLogger.level = DEBUG
2 es7.1 一共两组RollFile日志,一老一新。新的rolling这样修改:
appender.rolling.filter.threshold.type = RegexFilter
appender.rolling.filter.threshold.regex = .((?i)SELECT)\s.
appender.rolling.filter.threshold.onMatch = ACCEPT
appender.rolling.filter.threshold.onMismatch = DENY

.*((?i)SELECT)\s.*是一个正则表达式,对于输入的全部DEBUG级别以上的海量日志,只保留含有SELECT 大小写忽略的日志。
3 老的rolling_old这样修改:
appender.rolling_old.filter.threshold.type = ThresholdFilter
appender.rolling_old.filter.threshold.level = INFO
appender.rolling_old.filter.threshold.onMatch = ACCEPT
appender.rolling_old.filter.threshold.onMismatch = DENY

虽然输入的是DEBUG级别以上的海量日志,但只保留INFO以上的日志,这样xx(es名).log 这个文件还保留原貌,不会爆炸你的硬盘。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值