我使用以下配置配置了/etc/syslog.conf
*.* @10.10.10.2:514
*.* @@10.10.10.2:514
并记录下面的代码
openlog("Test-Msg", LOG_PID, LOG_LOCAL0);
for (int i = 0; i <10; i++)
{
syslog(LOG_ALERT, "My msg %d", i);
std::cout<<"-------------Writing Syslog "<<i<<"\n";
}
closelog();
但它没有转发到远程服务器。而不是它创建一个文件“@ 10.10.10.2:514”&amp; “@@ 10.10.10.2:514”并记录所有信息。
使用wireshark测试,没有消息被转发到远程系统。
我正在使用yocto平台和busybox 1.22系统日志实现。
更新
在yocto中我看到另外一个配置文件/etc/syslog-startup.conf并在那里配置
DESTINATION=remote # log destinations (buffer file remote)
REMOTE=10.10.10.2:514 # where to log (syslog remote)
现在它开始转发所有消息,但根据linux手册,syslog conf必须支持*.=alert @<host:port>
过滤器。如果我必须使用上述配置,我该如何应用过滤器?
答案 0 :(得分:1)
默认情况下,基于Yocto的系统使用Busybox提供许多基本工具的最小版本。 syslog是这些工具之一。这是Busybox文档的引用:
请注意,此版本的syslogd会忽略/etc/syslog.conf。
要获得完整的系统日志功能,您必须在图像上包含更完整的实现。 meta-openembedded中有几个选项,rsyslog in meta-oe可能是一个很好的默认选择。
答案 1 :(得分:0)
我首先使用logger(busybox中包含的工具)来确保您的syslog配置正确。 如果通过此方法很好地发送消息,那么我们可以调查代码。
import os
import xlrd
import sys
import unicodedata
workbook_path = "path/to/my/file.xlsx"
workbook = xlrd.open_workbook(workbook_path)
sheet = workbook.sheet_by_name("Sheet1")
csv_data = ""
def normalize(value):
result = unicodedata.normalize("NFKD", unicode(value)).encode("ascii","ignore")
return result
for rowx in range(sheet.nrows):
coldata = sheet.row_values(rowx)
# Append data to string that we are going to output
# and add new line
csv_data += ", ".join(normalize(x) for x in coldata) + "\n"
with open ("/path/log.txt","a") as results:
results.write(csv_data)
答案 2 :(得分:0)
我也在调查这个问题。 busybox支持远程日志记录,但它似乎转发所有消息。不支持过滤与远程日志记录相结合。我在图像上安装了rsyslog来解决这个问题。
我还发现rsyslog不会立即旋转文件。 Logrotate作为依赖项安装,但没有运行cron守护程序。我必须安装cronie并配置cronie,logrotate和rsyslog。