Я разрабатываю плагин для программы, в частности Bukkit, сервера minecraft, и мне нужно захватить все, что отображается в консоли. Однако по какой-то причине я не могу этого сделать. Следующий код является то, что я использую, чтобы применить мои фильтры:Мониторинг всего вывода на консоль
/**
*
*/
package com.gmail.neonblue858.remoteconsole.plugin;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.scheduler.BukkitRunnable;
/**
*
*
*@author Meguy26
*
*/
public class FilterApplyer extends BukkitRunnable {
private ClientManager man;
public FilterApplyer(ClientManager man){
this.man = man;
}
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
//Create handler
LogHandler handler = new LogHandler(man);
//Set handler to capture everything
handler.setLevel(Level.ALL);
//Add handler to root logger so it applies to all loggers
Logger.getLogger("").addHandler(handler);
//Set the system out to a filtering output stream
System.setOut(new FilterOutputStream(System.out, man));
//Set the system err to a filtering output stream
System.setErr(new FilterOutputStream(System.err, man));
}
}
Я был в предположении, что применение фильтра к корневому регистратору, а также оба систем потоков позволило бы мне все успеть. Однако есть некоторые сообщения, которые выходят из фильтра. Я не знаю, почему это не работает. Есть ли способ, кроме журналов или System.out, что можно распечатать на консоль?
Примечание: ClientManager, LogHandler и FilterOutputStream в приведенном выше коде являются классами, которые я написал, и я гарантировал их правильную работу. Я уверен, что проблема в том, что я не применяю фильтр к каждому источнику печати.