syslog-ng 本地读写失败

Posted

技术标签:

【中文标题】syslog-ng 本地读写失败【英文标题】:Syslog-ng fails to read and write locally 【发布时间】:2016-10-04 23:11:34 【问题描述】:

这是我在 *** 上的第一个问题,如果我不小心违反了一些规则,请原谅我。

我想做的是让一个程序编写一个简单的日志并让 syslog-ng 读取该日志,然后写入另一个文件。

这个输入日志文件是一个包含随机数的文件。

这是我的 syslog-ng.conf 文件的内容。

source s_file

        file("/home/vagrant/test1.log" follow-freq(1) flags(no_parse));
;

destination d_file

        file("/home/vagrant/poc.db");
;

log

        source(s_file);
        destination(d_file);

这里是生成随机数的程序的源代码。

import java.util.*;
import java.io.*;

public class loggerSpam

    PrintWriter out;

    public loggerSpam() 
            try 
                    out = new PrintWriter(new FileWriter("test1.log"));
             catch (Exception e) 
                    System.out.println("Caught");
            finally 
                    System.out.println("Constructor");
            
     

     public void spam() 
            Random rand = new Random();

            try 
                    for (int i = 0; i < 10; i++) 
                            int num = rand.nextInt(10);
                            String msg = Integer.toString(num) + "\n";
                            System.out.print(msg);
                            out.write(msg);
                    
                    out.close();

             catch (Exception e) 
                    System.out.println(e.toString());
            
                    

    public static void main(String args[])

            //Create spammer object
            loggerSpam testObj = new loggerSpam();
            //spam test.log
            testObj.spam();

    

我的理解是,如果我将配置文件放在 /etc/syslog-ng/ 中然后重新启动 syslog-ng 服务,我需要做的就是运行我的程序,并且 syslog-ng 应该能够检测到有生成的日志文件。生成日志文件后,syslog 将读取日志并写入我的目标文件 poc.db。

但是,我的问题是 syslog-ng 没有读取 test1.log,也没有生成 poc.db。有人可以解释这是为什么吗?我能改变什么?根据 syslog-ng 网站上的指南,我需要能够在本地写入文件,以便调试其他问题。

感谢您的帮助!

【问题讨论】:

您好,尝试运行 'syslog-ng -Fevd' 以查看是否有任何错误消息或警告。我的猜测是,由于您没有将正确的 syslog 消息写入文件,只有一些随机字符串,syslog-ng 不会将它们识别为日志消息并忽略它们。如果是这种情况,请将 flags(no-parse) 选项添加到您的源代码中。 我已经删除了除了这个之外的所有 .conf。看来我有一些语法错误。所有其他 conf 文件都淹没了我的 cmd 消息,我无法看到这些错误。谢谢罗伯特。 不客气!我很高兴它成功了。 【参考方案1】:

试试这个: 首先创建具有所有(读/写/执行)权限的空 test1.log 文件,因为在启动 syslog-ng 服务器时,它首先会检查源文件以获取日志。

之后,如果您在文件中附加文本,syslog-ng 会将其视为日志..

【讨论】:

以上是关于syslog-ng 本地读写失败的主要内容,如果未能解决你的问题,请参考以下文章

Syslog-ng配置ElasticSearch

syslog-ng 尾文件缺少最后一行

syslog-ng+loganalyzer(非常详细配置文件)部署收集操作日志

syslog-ng 是不是支持网络命名空间?

如何在 syslog-ng 中使用 patterndb

Centos7下安装syslog-ng