поэтому я использую Debian на своем личном ноутбуке с Windows. Я выполняю задание, которое влечет за собой использование библиотеки syslog c для печати из моей программы при выполнении операторов.
Вот соответствующий код, который я использовал в своей программе:
#include <syslog.h>
(тогда в основном)
openlog("slog",LOG_PID|LOG_CONS,LOG_USER);
syslog(LOG_INFO,"wuddup to u");
closelog();
С работающим кодом проблем нет, но я не могу найти файл с напечатанным журналом.
в Debian системный журнал должен сохраняться либо в /var/log/syslog, либо в /var/log/messages. /var/log существует, но у меня внутри нет ни одной из этих папок.
Похоже, он не находится в скрытом файле, поэтому я не думаю, что это проблема с правами доступа. syslog.conf, который должен находиться в /etc, также не существует.
Однако в 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
записи. - person Jonathan Leffler   schedule 10.06.2021-
заключается в том, чтобы пропустить синхронизацию после каждой записи в журнале. - person Ian Abbott   schedule 10.06.2021/var/log/messages
— это файл; нет/var/log/syslog
файла или каталога. Вы видите, что демон syslog работает? Попробуйтеps -ef | grep '[s]yslog'
и посмотрите, что он покажет — я получаю запись с/usr/sbin/rsyslogd
в качестве программы. - person Jonathan Leffler   schedule 10.06.2021-
кажется довольно стандартным для Debian. - person Ian Abbott   schedule 10.06.2021uname -a
, вы используете WSL. В WSL rsyslogd не запускается по умолчанию. Попробуйте запустить его сначала сsudo service rsyslog start
. - person Mers   schedule 10.06.2021ps
не будет показывать rsyslog, если он не запущен, и похоже, что вы не можете его запустить по какой-то причине. Я бы посоветовал вам обновить WSL до WSL 2, а затем переустановить rsyslog, если проблема не устранена. Вы можете найти инструкции по обновлению до WSL 2 здесь . Кроме того, не беспокойтесь о тире перед путем syslog в файле конфигурации: тире означает, что файл журнала не синхронизируется с диском каждый раз, когда происходит запись, если параметр синхронизации включен по умолчанию. - person Mers   schedule 11.06.2021/dev/log
, который rsyslogd прослушивает для журналов./proc/kmsg
, на который ссылается ошибка, также является буфером журнала ядра, что является дополнительной причиной для обновления ядра и, возможно, переустановки rsyslog с помощьюsudo apt-get install --reinstall rsyslog
. - person Mers   schedule 11.06.2021