C语言 linux在哪里存储我的系统日志?

dy2hfwbg  于 2023-08-03  发布在  Linux
关注(0)|答案(8)|浏览(130)

我编写了一个简单的测试应用程序,将一些内容记录到日志文件中。我正在使用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;
}

3htmauhk

3htmauhk1#

在我的Ubuntu机器上,我可以在/var/log/syslog处看到输出。
在RHEL/CentOS机器上,可以在/var/log/messages中找到输出。
这是由rsyslog服务控制的,所以如果由于某种原因禁用了它,您可能需要使用systemctl start rsyslog启动它。
正如其他人所指出的,您的syslog()输出将由/var/log/syslog文件记录。
您可以在/var/log上查看系统、用户和其他日志。
更多详情:这是一个interesting link

aiazj4mn

aiazj4mn2#

默认日志位置(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

um6iljoc

um6iljoc3#

除了公认的答案外,了解以下几点也是有用的。。
这些功能中的每一个都应该有与之关联的 * 手册页 *。
如果您运行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手册页的摘录,它解释了手册页的各个部分:

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);


这不是一个直接的答案,但希望你会发现这是有用的。

mgdq6dx1

mgdq6dx14#

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

ws51t4hk

ws51t4hk5#

syslog()生成日志消息,该消息将由syslogd分发。
配置syslogd的文件是/etc/syslog. conf。此文件将告诉您记录消息的位置。
如何更改此文件中的选项?给你http://www.bo.infn.it/alice/alice-doc/mll-doc/duix/admgde/node74.html

tuwxkamq

tuwxkamq6#

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

jum4pzuy

jum4pzuy7#

我在WSL(Linux的Windows子系统)下运行Ubuntu,systemctl start rsyslog不适合我。
所以我做的是:

$ service rsyslog start

字符串
现在syslog文件将出现在/var/log/

ttvkxqim

ttvkxqim8#

一些非常重要的事情,人们没有提到,为了确定如何工作的日志应用程序在您的操作系统是检查配置文件。
基于Linux历史上的日志应用程序,以下是可用的:

  • syslog:/etc/syslog.conf(第一版)
  • rsyslog:/etc/rsyslog.conf/etc/rsyslog.d/(大多数发行版使用的当前版本)

检查配置文件,你会弄清楚日志是如何在你的系统上工作的(以及文件的位置)。
最后,要检查处理日志记录的系统单元或守护进程是什么,可以使用以下命令进行检查:

systemctl list-unit-files *syslog*
systemctl status rsyslog

字符串
你好

相关问题