c-linux在哪里存储我的系统日志?

我编写了一个简单的测试应用程序,以将某些内容记录到日志文件中。 我正在使用linux mint,在应用程序执行后,我尝试使用以下命令查看日志:

tail -n 100 /var/log/messages

但是文件消息既不经过测试也不存在。 在下面可以找到我的代码。 也许我做错了什么,文件没有存储在那儿,或者我需要启用Linux Mint中的登录功能。

#include <stdio.h>
#include <stdlib.h>
#include <syslog.h>

void init_log()
{
    setlogmask(LOG_UPTO(LOG_NOTICE));
    openlog("testd",LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
}

int main(void) {

    init_log();
    printf("Session started!");
    syslog(LOG_NOTICE, "Session started!!");
    closelog();

    return EXIT_SUCCESS;
}
opc0de asked 2019-10-08T17:01:19Z
6个解决方案
50 votes

在我的Ubuntu计算机上,我可以在/var/log/syslog看到输出。

如其他人所述,您的syslog()输出将由/var/log/syslog文件记录。
您可以在/var/log查看系统,用户和其他日志。

有关更多详细信息:这是一个有趣的链接。

TheCottonSilk answered 2019-10-08T17:01:56Z
19 votes

除了可接受的答案,了解以下内容也很有用...

这些功能中的每一个都应具有与其相关的手册页。

如果运行man 3 syslog(手册页的关键字搜索),您将获得引用或有关syslog的手册页列表。

$ man -k syslog
logger (1)           - a shell command interface to the syslog(3) system l...
rsyslog.conf (5)     - rsyslogd(8) configuration file
rsyslogd (8)         - reliable and extended syslogd
syslog (2)           - read and/or clear kernel message ring buffer; set c...
syslog (3)           - send messages to the system logger
vsyslog (3)          - send messages to the system logger

您需要了解手册部分才能进一步研究。

这是man手册页的摘录,其中解释了手册页的各个部分:

The table below shows the section numbers of the manual followed  by
the types of pages they contain.

   1   Executable programs or shell commands
   2   System calls (functions provided by the kernel)
   3   Library calls (functions within program libraries)
   4   Special files (usually found in /dev)
   5   File formats and conventions eg /etc/passwd
   6   Games
   7   Miscellaneous  (including  macro  packages and conven‐
       tions), e.g. man(7), groff(7)
   8   System administration commands (usually only for root)
   9   Kernel routines [Non standard]

阅读以上运行

$man man 

因此,如果运行man 3 syslog,您将获得在代码中调用的syslog函数的完整手册页。

SYSLOG(3)                Linux Programmer's Manual                SYSLOG(3)

NAME
   closelog,  openlog,  syslog,  vsyslog  - send messages to the system
   logger

SYNOPSIS
   #include <syslog.h>

   void openlog(const char *ident, int option, int facility);
   void syslog(int priority, const char *format, ...);
   void closelog(void);

   #include <stdarg.h>

   void vsyslog(int priority, const char *format, va_list ap);

不是直接的答案,但希望您会发现这很有用。

Rob Kielty answered 2019-10-08T17:03:11Z
17 votes

默认日志位置(rhel)为

一般讯息:

/var/log/messages

认证消息:

/var/log/secure

邮件事件:

/var/log/maillog

检查您的/etc/syslog.conf/etc/syslog-ng.conf(这取决于您安装了哪种syslog工具)

例:

$ cat /etc/syslog.conf
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none         /var/log/messages

# The authpriv file has restricted access.
authpriv.*                             /var/log/secure

# Log all the mail messages in one place.
mail.*                                 /var/log/maillog

#For a start, use this simplified approach.
*.*                                     /var/log/messages
rkosegi answered 2019-10-08T17:04:07Z
8 votes

您必须告诉系统要记录哪些信息以及将信息放在何处。 在cat /etc/rsyslog.conf文件中配置了日志记录,然后重新启动rsyslog以加载新配置。 默认的日志记录规则通常在文件/etc/rsyslog.d/50-default.conf中。

david tooke answered 2019-10-08T17:04:35Z
4 votes

syslog()生成一条日志消息,该消息将由syslogd分发。

用于配置syslogd的文件是/etc/syslog.conf。该文件将告诉您消息的记录位置。

如何更改此文件中的选项?干得好[http://www.bo.infn.it/alice/alice-doc/mll-doc/duix/admgde/node74.html]

Clément answered 2019-10-08T17:05:17Z
4 votes

在Linux中,日志记录是非常可配置的,因此您可能需要研究/var/log/(或可能在dmesg下)。 详细信息取决于日志子系统和分布。

还要查看/var/log/下的文件(对于内核日志,也许可以运行dmesg)。

Basile Starynkevitch answered 2019-10-08T17:05:51Z
translate from https://stackoverflow.com:/questions/10979435/where-does-linux-store-my-syslog