制作一个日志文件

制作一个日志文件

有没有办法在linux中借助一些库函数或c语言的系统调用来制作一个日志文件来维护/var/log/中的一些数据。我还想知道我们在编写和处理日志时应该遵循哪些标准。谢谢

答案1

从 C 程序记录的标准方法是syslog

首先包含头文件:

#include <syslog.h>

然后在程序的早期,您应该通过调用以下命令来配置系统日志openlog

openlog("programname", 0, LOG_USER);

第一个参数是标识或标签,它会自动添加到每条消息的开头。将您的程序名称放在这里。

第二个参数是您想要使用的选项,或者0用于正常行为的选项。完整的选项列表位于man 3 syslog.您可能会发现有用的一个是LOG_PID,它使 syslog 也在日志消息中记录进程 ID。

然后,每次你想写一条日志消息时,你调用syslog

syslog(LOG_INFO, "%s", "Message");

第一个参数是优先级。优先级范围从DEBUG(最不重要)到EMERG(仅适用于紧急情况),其中DEBUGINFO、 和ERR是最常用的。请参阅man 3 syslog您的选择。

第二个和第三个参数是格式和消息,就像 printf 一样。

该日志文件出现在哪个日志文件中取决于您的系统日志设置。

使用默认设置,它可能会进入/var/log/messages.


LOG_LOCAL0您可以使用to范围内的工具之一来设置自定义日志文件LOG_LOCAL7

您可以通过更改来使用它们:

openlog("programname", 0, LOG_USER);

openlog("programname", 0, LOG_LOCAL0);

或者

openlog("programname", 0, LOG_LOCAL1);

ETC。

并添加相应的条目/etc/syslog.conf,例如

local1.info /var/log/programname.log

并重新启动系统日志服务器,例如

pkill -HUP syslogd

.info上面的部分意味着local1.info所有重要或更重要的消息都会INFO被记录,包括INFO,,(错误),(严重)等,但不记录。NOTICEERRCRITDEBUG


或者,如果你有rsyslog,你可以尝试一个基于属性的过滤器,例如

:syslogtag, isequal, "programname:"    /var/log/programname.log

syslogtag 应包含“:”。

或者,如果您计划将软件分发给其他人,那么依赖使用LOG_LOCALrsyslog过滤器可能不是一个好主意。

在这种情况下,您应该使用LOG_USER(如果它是普通程序)或LOG_DAEMON(如果它是服务器)使用 编写启动消息和错误消息syslog,但将所有日志消息写入syslog.例如,Apache HTTPd 记录到/var/log/apache2/*/var/log/httpd/*,我假设使用常规open/fopenwrite/printf调用。

答案2

您将需要#include <syslog.h>,然后使用这些syslog()功能将数据发送到任何处于活动状态的系统日志程序。

请参阅手册页在这里

答案3

有很多可能性,你的计划是什么?您只需要一个从命令行登录的选项吗?看看logger(包含在bsdutils)。只需输入:

usr@srv % logger test

它会将这样的内容记录到您的/var/log/syslog

Apr 25 07:55:15 localhost usr: test

也可以看看man logger。根据您的日志守护程序,您可以将这些消息排序到特定文件或按优先级过滤它们。

还有一些针对不同编程语言的解决方案,所以请告诉我你想做什么;-)

答案4

按程序名称过滤的写法与上面提到的不同,对于最新版本rsyslog(我的机器上的版本是5.8.6)如下所示:

if $programname == 'popa3d' then /var/log/popa3d.log

欲了解更多信息,请查看这里

相关内容