springboot使用syslog4j实现syslog日志的接收

437 阅读1分钟

引入依赖

<dependency>
  <groupId>org.graylog2</groupId>
  <artifactId>syslog4j</artifactId>
  <version>0.9.60</version> <!-- 使用你需要的版本号 -->
</dependency>

接收端代码

@Component
@Slf4j
public class SyslogServerComponent {

    private SyslogServerIF syslogServer;

    @Autowired
    private TgWarnLogService tgWarnLogService;

    @PostConstruct
    public void init() {
        syslogServer = SyslogServer.getInstance(SyslogConstants.UDP);
        //        SyslogServerConfigIF config = syslogServer.getConfig();
        UDPNetSyslogServerConfig udpConfig = (UDPNetSyslogServerConfig) syslogServer.getConfig();
        udpConfig.setHost("0.0.0.0");
        udpConfig.setPort(514);
        // 设置消息最大大小,默认1kb,日志较长会接收不全
        udpConfig.setMaxMessageSize(SyslogConstants.SYSLOG_BUFFER_SIZE * 20);

        udpConfig.addEventHandler(new SyslogServerSessionEventHandlerIF() {
            @Override
            public Object sessionOpened(SyslogServerIF syslogServerIF, SocketAddress socketAddress) {
                return null;
            }

            @Override
            public void event(Object o, SyslogServerIF syslogServerIF, SocketAddress socketAddress,
                              SyslogServerEventIF syslogServerEventIF) {
                log.warn("接收syslog---------------->");
                System.out.println("receive from:" + socketAddress + "\tmessage" + syslogServerEventIF.getMessage());

                // do something 自己的业务逻辑
            }

            @Override
            public void exception(Object o, SyslogServerIF syslogServerIF, SocketAddress socketAddress, Exception e) {
                e.printStackTrace();
            }

            @Override
            public void sessionClosed(Object o, SyslogServerIF syslogServerIF, SocketAddress socketAddress, boolean b) {

            }

            @Override
            public void initialize(SyslogServerIF syslogServerIF) {

            }

            @Override
            public void destroy(SyslogServerIF syslogServerIF) {

            }
        });
        SyslogServer.getThreadedInstance(SyslogConstants.UDP);

        // 启动Syslog服务器
        try {
            syslogServer.initialize("SyslogServer", syslogServer.getConfig());
            syslogServer.run();
            log.warn("SyslogServer run----------------------->");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @PreDestroy
    public void destroy() {
        if (syslogServer != null) {
            syslogServer.shutdown();
            log.warn("SyslogServer destroy----------------------->");
        }
    }

}