#java #logging
#java — язык #ведение журнала #java
Вопрос:
У меня есть ArrayList
вызванный fileList
. Он содержит список имен файлов. С помощью цикла for я создаю поток для каждого имени файла и отслеживаю файл с помощью TailListener
Java API. Теперь я хочу получить имя файла для каждого сообщения, присутствующего в файлах.
fileListener= new fileListener();
for(int i=0;i<fileList.Size();i )
{
monitorFile(filelist.get(i));
}
private void monitorFile(String logFile) {
File pcounter_log = new File(logFile);
Tailer = new Tailer(pcounter_log, fileListener, 5000);
ThreadPoolExec.scheduleAtFixedRate(Tailer, 5, 5, TimeUnit.SECONDS);
}
public class fileListener extends TailerListenerAdapter {
String s= "abc";
public void handle(String line) {
if(line.contains(s)){
System.out.println(line);
}
}
}
В приведенном выше коде, как мне получить имя файла для соответствующих сообщений журнала?
Комментарии:
1. Какие соответствующие сообщения журнала? Боюсь, ваш вопрос далек от ясности. Пожалуйста, прочитайте tinyurl.com/so-hints и отредактируйте свой вопрос, чтобы предоставить больше информации.
Ответ №1:
Одним из простых способов было бы использовать отдельные прослушиватели для каждого файла:
Измените свой fileListener
класс на что-то вроде этого:
public class FileListener extends TailerListenerAdapter {
private final String fileName;
public FileListener(String fileName) {
this.fileName = fileName;
}
public void handle(String line) {
if(line.contains(s)){
System.out.println(fileName ": " line);
}
}
}
Затем просто создайте новый экземпляр FileListener
для каждого файла, который вы отслеживаете:
private void monitorFile(String logFile) {
File pcounter_log = new File(logFile);
Tailer = new Tailer(pcounter_log, new FileListener(logFile), 5000);
ThreadPoolExec.scheduleAtFixedRate(Tailer, 5, 5, TimeUnit.SECONDS);
}