我在使用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 。
答案 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/
)。