守护进程在Linux中登录

cod*_*key 66 c linux logging daemon

所以我在Linux系统上运行了一个守护进程,我希望记录它的活动:日志.问题是,实现这一目标的"最佳"方法是什么?

我的第一个想法是简单地打开一个文件并写入它.

FILE* log = fopen("logfile.log", "w");
/* daemon works...needs to write to log */
fprintf(log, "foo%s\n", (char*)bar);
/* ...all done, close the file */
fclose(log);
Run Code Online (Sandbox Code Playgroud)

以这种方式记录是否有任何内在错误?有没有更好的方法,比如Linux内置的一些框架?

Vin*_*vic 100

Unix已经有很长一段时间了,它是一个名为syslog的特殊日志框架.输入你的shell

man 3 syslog
Run Code Online (Sandbox Code Playgroud)

你将获得C接口的帮助.

一些 例子

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

int main(void) {

 openlog("slog", LOG_PID|LOG_CONS, LOG_USER);
 syslog(LOG_INFO, "A different kind of Hello world ... ");
 closelog();

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,现在正在为Linux提出对这个古老工具的更改.见http://www.h-online.com/open/news/item/Journal-end-of-the-line-for-syslog-1382246.html (4认同)
  • @VinkoVrsalovic在哪里保存日志?谢谢! (3认同)
  • @ opc0de取决于配置(/etc/syslog.conf或更新的系统/etc/rsyslog.conf或其中包含的内容,/ etc/rsyslog.d/*.conf)您的配置可能位于其他地方,请查看手册为您的系统 (2认同)

Ric*_*ard 23

可能是一场赛马,但是大多数(如果不是全部)Un*x衍生品中存在的系统日志工具是首选方式.记录到文件没有任何问题,但它确实留下了许多任务:

  • 您的日志记录位置是否有文件系统来保存文件
  • 缓冲(性能)与刷新(在系统崩溃之前写入日志)
  • 如果您的守护程序运行了很长时间,您如何处理不断增长的日志文件.

Syslog将为您解决所有这些问题.API类似于printf部落,因此您在调整代码时应该没有任何问题.


Dav*_*man 11

更大(或更安全意识)安装中syslog的另一个优点:syslog守护程序可以配置为将日志发送到另一台服务器以便在那里进行记录,而不是(或除此之外)本地文件系统.

将服务器场的所有日志放在一个位置更方便,而不必在每台计算机上单独读取它们,尤其是当您尝试将一台服务器上的事件与另一台服务器上的事件相关联时.当一个人破解时,你不能再信任它的日志......但是如果日志服务器保持安全,你知道什么都不会从它的日志中删除,所以任何入侵记录都将完好无损.


phr*_*kre 8

当我进行单元测试时,我向daemon.info和daemon.debug吐出了很多守护进程消息.syslog.conf中的一行可以将这些消息粘贴到您想要的任何文件中.

http://www.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/040/4036/4036s1.html比手册页imo更好地解释了C API.