- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我通过使用以下代码同时使用 Tailer 和 WatchService:
AgentTailerListener listener = new AgentTailerListener();
Tailer tailer;
WatchService watcher = FileSystems.getDefault().newWatchService();
while (true) {
WatchKey watchKey;
watchKey = Paths.get("/tmp").register(watcher, ENTRY_CREATE);
watchKey = watcher.take();
for (WatchEvent<?> event : watchKey.pollEvents()) {
if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
tailSource = event.context().toString();
System.out.println(tailSource);
File file = new File("/tmp/" + tailSource);
String end = "log";
if (file.getName().endsWith(end)) {
tailer = TailerFactory.createTailer(file, listener);
(new Thread(tailer)).start();
}
}
}
watchKey.reset();
transport.close();
}
但问题是:我只想用 tailer 检查一个文件(就像停止线程一样,但我无法停止特定于文件的线程),当我通过 echo 命令写入文件时,并不是所有我写的字母都会出现。
当我用 echo 连续多次写入相同的文本时,所有字母都会被写入。
我看到这个话题,How to tail -f the latest log file with a given pattern ,但我不知道是否可以用它来解决我的问题(我不知道 tail 和 tailer 之间的区别)。
最佳答案
最后,我认为这样效果更好:
AgentTailerListener listener = new AgentTailerListener();
Tailer tailer;
String tailSource;
Thread thread;
WatchService watcher = FileSystems.getDefault().newWatchService();
WatchKey watchKey;
watchKey = Paths.get("/tmp").register(watcher, ENTRY_CREATE);
List<Thread> threadList = new ArrayList<Thread>();
while (true) {
watchKey = watcher.take();
for (WatchEvent<?> event : watchKey.pollEvents()) {
if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
tailSource = event.context().toString();
System.out.println(tailSource);
File file = new File("/tmp/" + tailSource);
String end = "log";
if (file.getName().endsWith(end)) {
tailer= TailerFactory.createTailer(file, listener);
if(threadList.isEmpty()){}
else{
Thread.sleep(1000);
threadList.get(0).stop();
threadList.clear();}
System.out.println(threadList.size());
threadList.add(thread = new Thread(tailer));
threadList.get(0).start();
}
}
}
watchKey.reset();
}
但是它创建了很多线程,我想我必须使用修复线程池。
关于java - 使用 Tailer 和 WatchService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31568820/
我通过使用以下代码同时使用 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
我是一名优秀的程序员,十分优秀!