如何使用log4j和storm框架将日志写入文件?

vnzz0bqm  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(406)

我在storm中使用log4j登录到一个文件时遇到了一点问题。
在提交拓扑之前,即在main方法中,我编写了一些日志语句,并使用以下命令配置了记录器:

PropertyConfigurator.configure(myLog4jProperties)

现在,当我在eclipse中使用可执行jar运行拓扑时,它工作正常,日志文件也按预期创建。

当我使用“java-jar myjarfile someotheroptions”运行我的可执行jar时,我可以看到正在配置log4j,文件的格式正确,并且在文件和控制台上都完成了日志记录(如log4j.properties中所定义的)
但是,当我使用“storm jar myjarfile mymainclass someotheroptions”运行同一个jar时,除了在控制台上,它无法创建和登录任何文件。
我说的是在提交拓扑之前打印的日志。
在使用storm时,有没有办法将我的语句记录到文件中?我不一定要使用org.apache.log4j。

4nkexdtk

4nkexdtk1#

我建议您在storm内使用slf4j进行登录。您可能可以让log4j正常工作,但在集群中的每个节点上都有额外的设置要做。既然storm已经帮你做了这件事,我真的不明白重点。
在您的项目中,包括以下maven依赖项(slf4j对于您的单元测试很简单!):

<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);

在我的环境中,任何信息和以上都会记录到文件中,更重要的是,在storm ui中可见。您只需单击喷口/螺栓,然后单击端口号即可转到日志查看器页面。
如果你想得到实际的文件,那么你可以从每个节点收集它们(我的在 /var/log/storm/ ).

ggazkfy8

ggazkfy82#

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

相关问题