- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个应用程序(available here on GitHub - 下面的构建/运行说明),它会抓取日志文件并对写入日志的某些事件使用react(在本例中,向 REST API 发出 HTTP 请求)。我选择了 Java、Spring Boot 2.x、Apache Tailer和 OpenFeign作为实现这一目标的主要手段。
我怀疑我不了解 Apache Tailer 及其在后台工作的线程如何工作,或者如何在 Spring Boot 应用程序中正确利用它。初始化和运行 Tailer
的正确方法是什么?在 Spring Boot 应用程序的上下文中?
为了测试这一点,我在本地启动应用程序,并通过 shell 将文本行回显到给定的日志文件中。截至撰写本文时(提交 1fed906 ),当我运行该应用程序时,似乎:
Tailer 初始化(我可以看到 TailerListenerAdapter.init()
在我构建它的 TailerListenerAdapter
上被调用)
Tailer 运行(我看到我写入它监视的日志文件的所有内容都传递到 TailerListenerAdapter.handle()
)。
一旦我向日志写入我的 TailerListenerAdapter 知道它应该使用react的内容,看起来控制就会从 Tailer.run()
退出。方法调用,应用程序退出(优雅地)。我希望它继续运行并跟踪日志,直到我停止应用程序。
我不太确定该调用哪里 Tailer.run()
在这种情况下,所以我把它放在 @PostConstruct
中我的自定义 Tailer 子类中的方法。我从来没有使用过@PostConstruct
之前,所以我不能 100% 确定我正确使用它,或者是否有更好的地方放置它以确保 run()
在启动时被调用,同时还允许我将所有配置文件/bean 驱动选项注入(inject)其中。
在 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/
我通过使用以下代码同时使用 Tailer 和 WatchService: AgentTailerListener listener = new AgentTailerListener(); Taile
我可以使用 org.apache.commons.io.input.Tailer 包来跟踪多个日志文件,但无法获取它们的名称。可用的监听器(TailerListenerAdapter)不提供任何方法来
我的代码如下。 public static void main(String[] args) { // TODO code application logic here File pc
我正在开发一个读取/var/log/auth.log 文件的监控程序。我正在使用 Apache Commons IO Tailer类实时读取文件。首先,我想在一个简单的文件上测试实时阅读部分,并在控制
主要问题 我正在编写一个应用程序(available here on GitHub - 下面的构建/运行说明),它会抓取日志文件并对写入日志的某些事件使用react(在本例中,向 REST API 发
我正在使用 Tailer 从某些 log4j 日志文件中读取行,并仅将某些行写入另一个目标文件中。 现在我想每天轮换目标文件,或者至少想从目标文件中删除一些旧数据。 最好的方法是什么? 最佳答案 只要
我有一个实时读取日志文件的应用程序。在任何时候它都会读取约 100 个文件。在我的代码中,有 100 个线程专用于每个文件来尾监听日志。我已将应用程序部署在具有 4 核的 Unix 服务器上,并且我观
我正在开发一个小型应用程序,我可以将其指向 Apache HTTP 服务器日志,跟踪日志(Linux 中的“tail -f”),并将条目写入 Oracle 数据库表。 我设置了 Spring Boot
我是一名优秀的程序员,十分优秀!