gpt4 book ai didi

java - 如何在 Spring Boot 应用程序中使用 Apache Tailer?

转载 作者:行者123 更新时间:2023-12-01 16:33:36 24 4
gpt4 key购买 nike

主要问题

我正在编写一个应用程序(available here on GitHub - 下面的构建/运行说明),它会抓取日志文件并对写入日志的某些事件使用react(在本例中,向 REST API 发出 HTTP 请求)。我选择了 Java、Spring Boot 2.x、Apache TailerOpenFeign作为实现这一目标的主要手段。

我怀疑我不了解 Apache Tailer 及其在后台工作的线程如何工作,或者如何在 Spring Boot 应用程序中正确利用它。初始化和运行 Tailer 的正确方法是什么?在 Spring Boot 应用程序的上下文中?

其他信息

为了测试这一点,我在本地启动应用程序,并通过 shell 将文本行回显到给定的日志文件中。截至撰写本文时(提交 1fed906 ),当我运行该应用程序时,似乎:

  1. Tailer 初始化(我可以看到 TailerListenerAdapter.init() 在我构建它的 TailerListenerAdapter 上被调用)

  2. Tailer 运行(我看到我写入它监视的日志文件的所有内容都传递到 TailerListenerAdapter.handle() )。

一旦我向日志写入我的 TailerListenerAdapter 知道它应该使用react的内容,看起来控制就会从 Tailer.run() 退出。方法调用,应用程序退出(优雅地)。我希望它继续运行并跟踪日志,直到我停止应用程序。

我不太确定该调用哪里 Tailer.run()在这种情况下,所以我把它放在 @PostConstruct 中我的自定义 Tailer 子类中的方法。我从来没有使用过@PostConstruct之前,所以我不能 100% 确定我正确使用它,或者是否有更好的地方放置它以确保 run()在启动时被调用,同时还允许我将所有配置文件/bean 驱动选项注入(inject)其中。

构建/运行说明

  1. 克隆 project
  2. 在 shell 中运行: mvn spring-boot:run -Dspring-boot.run.arguments=--tailer.logFile=/path/to/any/test.log,--logging.level.com.github.ubunfu.mclogbot=DEBUG

    或者

    在 IDE 中设置等效的运行配置。有一个 application-local.yml Spring Boot 配置文件,其中可以指定测试日志文件的路径。在 IntelliJ 中,使用 Command Line 中的以下内容设置 Maven 运行配置:spring-boot:run -Dspring-boot.run.arguments=--spring.profiles.active=local

最佳答案

我现在非常确定在 Spring Boot 应用程序中运行 Tailer 的正确方法是修改主类以实现 CommandLineRunner (如本节中所述不错的小 Mkyong article ),然后从那里运行 Tailer 。我相信这是因为 Spring boot 假设您正在编写一个 Web 应用程序,其中入口点是由 Tomcat 或其他东西处理的入站请求。如果您想更改入口点(例如,它不是网络应用程序),您可以执行上述操作并基本上覆盖默认行为。

此外,我遇到了一个问题,即应用程序在读取本应导致 Feign 客户端进行 API 调用的行后,会意外地正常停止。事实证明,原因是 Feign 客户端抛出了一个我没有处理的 RuntimeException。由于没有堆栈跟踪或任何东西,因此并不能立即看出发生了任何异常。我怀疑这是因为 Tailer 在另一个线程中运行?我不太确定。要点是 - 使用 Tailer 时要注意这一点!

我希望这对某人有帮助!

关于java - 如何在 Spring Boot 应用程序中使用 Apache Tailer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62005058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com