После перезапуска демона rsyslog
syslog4j 0.9.46 больше нельзя успешно записывать в системный журнал без перезапуска процесса Java. Никаких исключений не выдается, и я не вижу способа проверить через API, работает ли ведение журнала. Есть ли способ заставить syslog4j восстановиться после перезапуска rsyslog
или, по крайней мере, создать исключение, чтобы соединение можно было перезапустить вручную?
Образец кода:
import java.util.Scanner;
import org.productivity.java.syslog4j.SyslogConstants;
import org.productivity.java.syslog4j.SyslogIF;
import org.productivity.java.syslog4j.impl.unix.socket.UnixSocketSyslog;
import org.productivity.java.syslog4j.impl.unix.socket.UnixSocketSyslogConfig;
public class SysLogging {
public static void main(String[] args) {
UnixSocketSyslogConfig cfg = new UnixSocketSyslogConfig();
cfg.setFacility(SyslogConstants.FACILITY_LOCAL1);
cfg.removeAllMessageModifiers();
cfg.setIdent(null);
cfg.setThrowExceptionOnWrite(true);
cfg.setWriteRetries(5);
SyslogIF log = new UnixSocketSyslog();
log.initialize(SyslogConstants.UNIX_SOCKET, cfg);
Scanner scanner = new Scanner(System.in);
System.out.println("type quit to quit, anything else to log");
String line = scanner.nextLine();
while(!line.equals("quit")) {
log.info(line);
System.out.println("type quit to quit, anything else to log");
line = scanner.nextLine();
}
scanner.close();
}
}
Приведенный выше код работает так, как вы думаете, пока rsyslog
не будет перезапущен. В этот момент в системном журнале больше не появляются сообщения, хотя в остальном все работает.