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

时间:2014-09-05 06:41:01

标签: java logging log4j slf4j apache-storm

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

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

PropertyConfigurator.configure(myLog4jProperties)
  • 现在,当我在eclipse中使用可执行jar 运行我的拓扑时 - 它的工作正常,日志文件正在按照假设创建 OR
    当我使用“java -jar MyJarFile”运行我的可执行jar时 someOtherOptions“,我可以看到log4j正在配置,文件是 正确形成并在文件和控制台上完成日志记录(如 在我的log4j.properties中定义)

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

我说的是我正在打印之前提交拓扑的日志。

使用storm时,有没有办法在文件中记录我的语句?我约束使用 org.apache.log4j

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

在你的项目中,包括这些maven依赖项(slf4j-simple用于你的单元测试!):

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.5</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.5</version>
  <scope>test</scope>
</dependency>

然后,在您的拓扑/喷口/螺栓内,您只需获取记录器:

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

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

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