如何使用Log4j和Storm Framework将日志写入文件?

我在使用log4j在风暴中记录到文件时遇到了一些问题。

在提交我的拓扑之前,即在我的main方法中,我编写了一些日志语句并使用以下命令配置了记录器:

PropertyConfigurator.configure(myLog4jProperties) 
  • 现在,当我在eclipse中使用我的可执行jar运行我的拓扑时 – 它正常工作并且正在创建日志文件。
    要么
    当我使用“java -jar MyJarFile someOtherOptions”运行我的可执行jar时,我可以看到log4j正在配置并且文件正确形成并且在两个文件和控制台上都进行了日志记录(在我的log4j.properties中定义)

  • 但是,当我使用“风暴jar MyJarFile MyMainClass someOtherOptions”运行相同的jar时,它无法创建并登录到除控制台之外的任何文件。

我正在谈论我提交拓扑之前打印的日志。

有没有办法在使用storm时将我的语句记录在文件中? 我不一定要使用org.apache.log4j

风暴框架使用自己的日志记录。 您的日志最有可能会在安装风暴的日志目录中结束({Storm DIR} / logs)。 您可以在{Storm DIR} /logback/cluster.xml中找到风暴日志属性。 它使用logback而不是log4j

我建议使用SLF4J进行风暴日志记录。 您可能可以使LOG4J正常工作,但您将在群集中的每个节点上进行其他设置。 既然风暴已经为你做了这件事,我真的没有看到这一点。

在您的项目中,包括这些maven依赖项(slf4j-simple用于您的unit testing!):

  org.slf4j slf4j-api 1.7.5   org.slf4j slf4j-simple 1.7.5 test  

然后,在您的拓扑/ spouts / bolt内部,您只需获取Logger:

 private static final Logger LOG = LoggerFactory.getLogger(MySpout.class); 

在我的环境中,任何INFO及以上版本都会记录到文件中,更重要的是, 可以在Storm UI中看到 。 您只需要单击您的喷口/螺栓,然后单击端口号即可转到日志查看器页面。

如果你想获得实际文件,那么你可以从每个节点收集它们(我的是/var/log/storm/ )。