首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当rsyslog重新启动时,syslog4j停止日志记录。

当rsyslog重新启动时,syslog4j停止日志记录。
EN

Stack Overflow用户
提问于 2016-02-11 01:27:23
回答 1查看 289关注 0票数 3

重新启动rsyslog守护进程之后,syslog4j 0.9.46将无法在不重新启动java进程的情况下成功地写入syslog。没有抛出任何异常,我看不到通过API检查日志是否仍然有效。是否有办法使syslog4j从rsyslog重新启动中恢复,或者至少抛出一个异常,以便可以手动重新启动连接?

样本代码:

代码语言:javascript
复制
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中不再出现任何消息,尽管一切似乎都在正常工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-11 20:59:02

与此类似的黑客应该会有所帮助:

代码语言:javascript
复制
    SyslogIF log = new UnixSocketSyslog() {
        @Override
        protected void write(int level, byte[] message) throws SyslogRuntimeException {
            if (this.fd == -1)
                connect();
            if (this.fd == -1)
                return;
            ByteBuffer byteBuffer = ByteBuffer.wrap(message);
            int ret = this.libraryInstance.write(this.fd,byteBuffer,message.length);
            if (ret < 0) {
                shutdown();
                connect();
                if (this.fd == -1)
                    return;
                ret = this.libraryInstance.write(this.fd,byteBuffer,message.length);
            }
        }
    };
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35329217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档