【发布时间】:2021-08-27 13:36:52
【问题描述】:
所以我在我的个人 Windows 笔记本电脑上使用 Debian。 我正在执行一项任务,需要在语句运行时使用 syslog c 库从我的程序中打印。
这是我在程序中使用的相关代码:
#include <syslog.h>
(然后在 main 中)
openlog("slog",LOG_PID|LOG_CONS,LOG_USER);
syslog(LOG_INFO,"wuddup to u");
closelog();
代码运行没有问题,但我找不到任何包含我打印的日志的文件。
在 Debian 上,系统日志应该保存在 /var/log/syslog 或 /var/log/messages 中。 /var/log 存在,但我没有其中任何一个文件夹。
它似乎不在隐藏文件中,所以我不认为这是权限问题。 应该位于 /etc 中的 syslog.conf 也不存在。
然而, 在 rsyslog.conf 中有一个对 syslog 的引用,它确实存在于 /etc 中
rsyslog.conf 中标题为 RULES 的部分开头如下:
#
# First some standard log files. Log by facility.
#
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
我还没有弄清楚破折号或其他部分的真正含义。 这是我在终端中尝试的一些可能相关命令的输出:
dmesg
[ 0.007738] Microsoft 4.4.0-18362.1049-Microsoft 4.4.35
uname -a
Linux DESKTOP-KH1LDFG 4.4.0-18362-Microsoft #1049-Microsoft Thu Aug 14 12:01:00 PST 2020 x86_64 GNU/Linux
找到 /syslog
find: ‘/syslog’: No such file or directory
sudo apt-get install syslog
[sudo] password for sarah:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package syslog
mkdir syslog(来自 /var/log)
mkdir: cannot create directory ‘syslog’: Permission denied
sudo 服务 rsyslog 启动
[....] Starting enhanced syslogd: rsyslogdrsyslogd: set SO_TIMESTAMP failed on '/dev/log': Invalid argument [v8.1901.0]
rsyslogd: imklog: cannot open kernel log (/proc/kmsg): No such file or directory.
rsyslogd: activation of module imklog failed [v8.1901.0 try https://www.rsyslog.com/e/2145 ]
. ok
【问题讨论】:
-
-/var/log/user.log前面的破折号-有什么意义?这是否意味着规则被禁用,或者文件必须已经存在(但它不存在)或其他什么?最后一行应该控制LOG_USER条目的去向。 -
@JonathanLeffler 根据this
-前缀是在每个日志条目后省略同步。 -
@IanAbbott:周围有不止一个 syslog 或 syslogd 包;我不确定 Debian 使用的那个是不是来自rsyslog.com 的那个。我认为,破折号与问题无关。
-
该平台似乎部分是 Microsoft,部分是 Linux — 一个奇怪的组合。在我使用的 RHEL 7.4 机器上,
/var/log/messages是一个文件;没有/var/log/syslog文件或目录。你能看到系统日志守护进程正在运行吗?试试ps -ef | grep '[s]yslog'看看它显示了什么——我得到一个以/usr/sbin/rsyslogd作为程序的条目。 -
根据您的
uname -a命令,您正在运行 WSL。在 WSL 上,默认情况下不启动 rsyslogd。尝试首先使用sudo service rsyslog start启动它。
标签: c linux debian windows-subsystem-for-linux syslog