繁体   English   中英

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

[英]How to write logs to a file using Log4j and 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的日志目录中({Storm DIR} / logs)。 您可以在{Storm DIR} /logback/cluster.xml中找到风暴日志属性。 它使用logback而不是log4j

我建议使用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>

然后,在您的拓扑/喷口/螺栓内部,您只需获取Logger:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM