Linux存储我的系统日志在哪里?

93

我写了一个简单的测试应用程序来记录日志。我正在使用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;
}

这取决于您使用的系统记录器。它应该在/etc/某个位置有一个配置文件,您需要更改其中的标识符(在您的情况下为“test”)和设施。 - Some programmer dude
似乎SuSE SLES 15 SP4不再默认安装rsyslog。显然,无论我传递什么参数到setlogmask()openlog(),所有syslog()消息都会出现在控制台/stdout上。 - Charlie Reitzel
8个回答

97

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

在RHEL/CentOS机器上,输出位于/var/log/messages中。

这是由rsyslog服务控制的,因此如果某些原因禁用了该服务,则可能需要使用systemctl start rsyslog启动它。

正如其他人所指出的那样,你的syslog()输出会被记录在/var/log/syslog文件中。
你可以在/var/log中查看系统、用户和其他日志。

更多详情请参考:有趣的链接


请参阅以下链接: http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch05_:_Troubleshooting_Linux_with_syslog#.Uy_0VvmSwep - AjayKumarBasuthkar
1
似乎/var/log/syslog并不是任何真正的默认设置;也许Ubuntu自己配置了它。 - kevr
太好了!systemctl restart rsyslog 生效了。 之前我无法访问我的日志,现在我知道原因了,谢谢!<3 - Dwaipayan Chakroborty

25
默认日志位置(rhel)如下:
一般信息消息:
/var/log/messages

认证消息:

/var/log/secure

邮件事件:

/var/log/maillog

请检查您安装的系统日志设施所对应的文件/etc/syslog.conf/etc/syslog-ng.conf

例如:

$ 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

23

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

每个函数都应该与手册页面相关联。

如果你运行 man -k 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页的一个摘录,解释了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);

虽然不是直接回答,但希望这对你有所帮助。


sh: man: 命令未找到 - Philip Rego
这并不能帮助用户找出syslog写入哪个文件。man 5 syslog.conf可以间接地告诉如何找到这个信息,但同样没有明确说明在特定系统上默认的文件是什么。 - Eric Dand

9

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


5

如果我的 /etc/syslog.conf 文件只包含注释,那么日志会被发送到默认位置吗? - Eliezer Miron
链接已损坏... - Daniel Griscom

5
记录日志在Linux中是非常可配置的,你可能想查看你的/etc/syslog.conf(或者也许在/etc/rsyslog.d/下)。详细信息取决于记录子系统和发行版。
还要查看/var/log/下的文件(也许运行dmesg获取内核日志)。

2

我正在使用Windows子系统Linux(WSL)运行Ubuntu,但是systemctl start rsyslog对我无效。

所以我做的是这样的:

$ service rsyslog start

现在,/var/log/ 目录下会出现一个 syslog 文件。

1
有一件很重要的事情没人提到,在识别操作系统上的日志应用程序如何工作之前,需要检查配置文件。
根据Linux历史上的日志应用程序,以下是可用的选项:
- syslog:`/etc/syslog.conf`(第一个版本) - rsyslog:`/etc/rsyslog.conf`或`/etc/rsyslog.d/`(当前版本,大多数发行版使用)
通过检查配置文件,你可以弄清楚系统上的日志记录方式(以及文件所在位置)。
最后,要检查处理日志记录的系统单元或守护进程,可以使用以下命令检查:
systemctl list-unit-files *syslog*
systemctl status rsyslog

问候,

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接