Каталог системного журнала не существует

поэтому я использую 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

person Sarah Wadley    schedule 10.06.2021    source источник
comment
Что означает тире - перед -/var/log/user.log? Означает ли это, что правило отключено, или файл уже должен существовать (но его нет) или что-то в этом роде? Последняя строка должна контролировать, куда идут LOG_USER записи.   -  person Jonathan Leffler    schedule 10.06.2021
comment
@JonathanLeffler Согласно этому префиксу - заключается в том, чтобы пропустить синхронизацию после каждой записи в журнале.   -  person Ian Abbott    schedule 10.06.2021
comment
@IanAbbott: существует более одного пакета syslog или syslogd; Я не был уверен, используется ли Debian тот же файл с rsyslog.com или нет. Тире не имеет отношения к проблеме, я думаю.   -  person Jonathan Leffler    schedule 10.06.2021
comment
Платформа частично Microsoft, частично Linux — любопытная комбинация. На машине RHEL 7.4, которую я использую, /var/log/messages — это файл; нет /var/log/syslog файла или каталога. Вы видите, что демон syslog работает? Попробуйте ps -ef | grep '[s]yslog' и посмотрите, что он покажет — я получаю запись с /usr/sbin/rsyslogd в качестве программы.   -  person Jonathan Leffler    schedule 10.06.2021
comment
@JonathanLeffler rsyslog Debian взят с rsyslog.com с некоторыми исправлениями. Использование префикса - кажется довольно стандартным для Debian.   -  person Ian Abbott    schedule 10.06.2021
comment
Debian @JonathanLeffler OP будет работать под управлением WSL2 в Windows 10, в которой используется ядро ​​Linux, созданное Microsoft. Стив Балмер перевернулся бы в гробу, если бы умер.   -  person Ian Abbott    schedule 10.06.2021
comment
@IanAbbott: Может быть, это способ создать «вечный двигатель» — сделать так, чтобы СБ перевернулся в гробу?   -  person Jonathan Leffler    schedule 10.06.2021
comment
Согласно вашей команде uname -a, вы используете WSL. В WSL rsyslogd не запускается по умолчанию. Попробуйте запустить его сначала с sudo service rsyslog start.   -  person Mers    schedule 10.06.2021
comment
поэтому команда ps -ef grep ничего не показала, и похоже, что команда запуска rsyslog была отклонена - я добавил вывод к своему вопросу. Я также собирался попробовать удалить тире перед путем syslog в rsyslog.conf, но linux предупредил меня об изменении файла только для чтения, поэтому я не решился на это.   -  person Sarah Wadley    schedule 11.06.2021
comment
ps не будет показывать rsyslog, если он не запущен, и похоже, что вы не можете его запустить по какой-то причине. Я бы посоветовал вам обновить WSL до WSL 2, а затем переустановить rsyslog, если проблема не устранена. Вы можете найти инструкции по обновлению до WSL 2 здесь . Кроме того, не беспокойтесь о тире перед путем syslog в файле конфигурации: тире означает, что файл журнала не синхронизируется с диском каждый раз, когда происходит запись, если параметр синхронизации включен по умолчанию.   -  person Mers    schedule 11.06.2021
comment
Кроме того, ошибка, отображаемая после того, как вы попытались запустить rsyslog, относится к сетевому сокету ядра /dev/log, который rsyslogd прослушивает для журналов. /proc/kmsg, на который ссылается ошибка, также является буфером журнала ядра, что является дополнительной причиной для обновления ядра и, возможно, переустановки rsyslog с помощью sudo apt-get install --reinstall rsyslog.   -  person Mers    schedule 11.06.2021
comment
о боже, это сработало!! поэтому я не проверял между командами, но я запустил «sudo apt-get install --reinstall rsyslog», а затем «sudo apt-get install wsl», а затем перекомпилировал свою программу и снова запустил ее. Затем я проверил файлы в /var/log, и системный журнал был там! с моими сообщениями журнала!! Благодарю вас!   -  person Sarah Wadley    schedule 11.06.2021
comment
Рад, что это сработало.   -  person Mers    schedule 11.06.2021


Ответы (1)


я побежал

'sudo apt-get install --reinstall rsyslog'

с последующим

'sudo apt-get install wsl' 

а затем я перекомпилировал свою программу и снова запустил ее. Затем я проверил файлы в /var/log, и системный журнал был там! с моими сообщениями журнала!! Благодарю вас!

person Sarah Wadley    schedule 11.06.2021
comment
Я не уверен в нескольких вещах - они могут быть проблемами: 1) Windows Subsystem for Linux (WSL) всегда НЕ точно такой же, как настоящий Linux. Вы можете найти различия между WSL и, скажем, Debian, установленным на виртуальной машине. 2) Я не уверен насчет slog в вашем openlog(). Вы настроили slog как действительного пользователя? 3) Самое главное, я не уверен, что вам вообще нужен openlog()/closelog(). Я считаю, что вы можете просто вызвать syslog(). - person paulsm4; 15.06.2021