После перезапуска демона rsyslog
syslog4j 0.9.46 больше не может успешно записывать в syslog без перезапуска java-процесса. Никакое исключение не выбрасывается, и я не вижу возможности проверить через API, работает ли ведение журнала. Есть ли способ вернуть syslog4j из перезапуска rsyslog
или, по крайней мере, выбросить исключение, чтобы соединение можно было перезапустить вручную?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
не будет перезапущен. В этот момент больше сообщений не появляется в syslog, хотя все, похоже, работает иначе.