用Apache org.apache.commons.io.input.Tailer监控日志文件变化很方便,但如果文件中有中文,回调函数TailerListener.handle中参数line是乱码,原因是目前的Tailer是按“西欧语言”(ISO8859-1)对日志文件进行解码的,而日志文件一般是用GBK或者UTF-8编码。解决方法是对line用ISO8859-1再进行一次编码得到原始的字节数组,然后用日志文件的格式进行解码,这样最终得到的字符串就OK了。实现方法如下:
服务类:
...
LogMonitorListener lml = new LogMonitorListener();
Tailer lmt = new Tailer(logfile, lml, 3000);
...
lmt.run();
监听器类:
public class LogMonitorListener extends TailerListenerAdapter {
...
@Override
public void handle(String line) {
msg = new String(line.getBytes("ISO8859-1"), "GBK") ; //用来处理GBK格式的日志
msg = new String(line.getBytes("ISO8859-1"), "UTF-8") ; //用来处理UTF-8格式的日志
...