【发布时间】:2014-03-27 11:34:48
【问题描述】:
当我使用命令运行水槽时:
bin/flume-ng agent --conf conf --conf-file flume.conf --name agentName -Dflume.root.logger=INFO,console
它会在控制台上列出所有日志数据。我想将所有这些日志数据(水槽的日志数据)存储在一个文件中。我该怎么做?
【问题讨论】:
标签: flume
当我使用命令运行水槽时:
bin/flume-ng agent --conf conf --conf-file flume.conf --name agentName -Dflume.root.logger=INFO,console
它会在控制台上列出所有日志数据。我想将所有这些日志数据(水槽的日志数据)存储在一个文件中。我该怎么做?
【问题讨论】:
标签: flume
您需要使用 log4j2 自定义构建 Flume。
您将 log4j2 配置为使用滚动文件附加程序,该附加程序每分钟(或您想要的任何延迟)滚动到假脱机目录。
您将 Flume 配置为针对该假脱机目录使用 SpoolingDirectorySource。
你不能使用直接的 Flume appender(比如 log4j2 中的)来记录 Flume,因为你会陷入死锁。
您不能将 log4j1 与滚动文件附加程序一起使用,因为它存在并发缺陷,这意味着它可能会将新消息写入旧文件,然后 SpoolingDirectorySource 会失败。
我不记得我是否使用这个设置尝试过 Flume 的 Log4j appender。该附加程序没有很多方法可以配置它,我认为如果您尝试与之交谈的后续代理关闭,它将给您带来问题。
另一种方法可能是修补 log4j1 并修复该并发缺陷(需要制作一个变量 volatile)
(是的,设置这个有点令人沮丧!)
【讨论】:
不要使用 -Dflume.root.logger=INFO,console 运行,然后flume会登录./logs
【讨论】: