Answers:
从C程序登录的标准方法是syslog
。
首先包括头文件:
#include <syslog.h>
然后在程序的早期,您应该通过调用openlog
以下命令配置syslog :
openlog("programname", 0, LOG_USER);
第一个参数是标识或标签,它会在每条消息的开头自动添加。在此处输入程序的名称。
第二个参数是您要使用的选项,或0
用于正常行为的选项。选项的完整列表在中man 3 syslog
。您可能会发现有用的一个是LOG_PID
,它使syslog还在日志消息中记录进程ID。
然后,每次您想写一条日志消息时,都调用syslog
:
syslog(LOG_INFO, "%s", "Message");
第一个参数是优先级。从优先级范围DEBUG
(最重要的), EMERG
(仅用于紧急情况)用DEBUG
,INFO
和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/syslog.conf
,例如
local1.info /var/log/programname.log
并重新启动系统日志服务器,例如
pkill -HUP syslogd
所述.info
的部分local1.info
以上意味着是所有消息INFO
或更重要的将被记录,包括INFO
,NOTICE
,ERR
(误差), CRIT
(关键的),等,但不DEBUG
。
或者,如果您有rsyslog
,则可以尝试基于属性的过滤器,例如
:syslogtag, isequal, "programname:" /var/log/programname.log
或者,如果您打算将软件分发给其他人,则依靠使用LOG_LOCAL
或rsyslog
筛选器可能不是一个好主意。
在这种情况下,您应该使用LOG_USER
(如果是正常程序)或LOG_DAEMON
(如果是服务器),使用编写启动消息和错误消息syslog
,但将所有日志消息写入之外的文件syslog
。例如,Apache HTTPd登录到/var/log/apache2/*
或/var/log/httpd/*
,我假设使用常规的open
/ fopen
和write
/ printf
调用。
rpm -qa | grep syslog
或dpkg -l '*syslog*'
可能会告诉您哪个。
sysklogd
当时唯一的syslog软件游戏。如今的软件,如syslog-ng
,rsyslog
以及dsyslog
存在并具有不仅仅是服务/水平更为复杂的过滤功能。
有很多可能性,您的计划是什么?您是否只需要从命令行登录的选项?看一看logger
(包含在bsdutils中)。只需输入:
usr@srv % logger test
它将类似这样的日志记录到您的/var/log/syslog
:
Apr 25 07:55:15 localhost usr: test
另见man logger
。根据您的日志记录守护程序,您可以将这些消息分类到特定文件,或按优先级过滤它们。
对于不同的编程语言,还有一些解决方案,所以请告诉我您想做什么;-)