Я использую 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();
}
Но проблема в том, что я хочу проверить только один файл с тейлером (как остановить поток, но я не могу остановить поток, специфичный для файла), и когда я записываю в файл командой echo, не все письма, которые я написал, появляются.
Когда я пишу один и тот же текст с эхом несколько раз подряд все буквы пишутся.
Я видел эту тему, Как связать -f последний файл журнала с заданным шаблоном, но я не знаю, смогу ли я использовать его для своей проблемы (я не знаю разницы между tail и tailer).