gpt4 book ai didi

c - 如何在日志文件中引入日期和时间

转载 作者:IT王子 更新时间:2023-10-29 00:08:56 24 4
gpt4 key购买 nike

我有一个用 C 语言编写的守护进程。我正在将事件记录在日志文件中,但现在我想在将事件写入日志文件时添加日期和时间。我怎样才能做到这一点?

当前日志文件:-

Event one occurred: result:
Event two occurred: result:

我希望日志文件看起来像:-

Sep 14 11:35:55 Event one occurred: result:
Sep 14 11:35:55 Event two occurred: result:

我的环境是C和Linux。

最佳答案

您需要考虑使用 dategmtimelocaltime 来获取实际日期和时间。

然后 strftime 可以为您格式化它。

示例程序如下:

#include <stdio.h>
#include <time.h>

int main (void) {
char buff[20];
struct tm *sTm;

time_t now = time (0);
sTm = gmtime (&now);

strftime (buff, sizeof(buff), "%Y-%m-%d %H:%M:%S", sTm);
printf ("%s %s\n", buff, "Event occurred now");

return 0;
}

这个输出:

2011-09-14 04:52:11 Event occurred now

我更喜欢使用 UTC 而不是本地时间,因为它允许您将来自不同地理位置的机器的事件联系在一起,而不必担心时区差异。换句话说,除非您非常确定不会跨越时区,否则请使用 gmtime 而不是 localtime

我也更喜欢 YYYY-MM-DD HH:MM:SS 格式,因为它比月份名称更容易排序,这对于提取和操作工具至关重要。


如果您有一个提供可选边界检查功能的实现(根据 C11 的附录 K),您可以优先使用 gmtime_s。它允许您指定您自己的缓冲区来接收结果,因此在可重入和/或线程代码中更安全。

要使用它,您需要将代码更改为:

#include <stdio.h>
#define __STDC_WANT_LIB_EXT1__ 1
#include <time.h>

int main (void) {
char buff[20];
struct tm sTm;

time_t now = time (0);
gmtime_s (&now, &sTm);

strftime (buff, sizeof(buff), "%Y-%m-%d %H:%M:%S", &sTm);
printf ("%s %s\n", buff, "Event occurred now");

return 0;
}

尽管您应该知道 Microsoft 的人员以某种方式设法以错误的方式获取了 gmtime_s 的参数。您需要考虑到这一点。

POSIX(和 Linux)还提供了一个 gmtime_r 函数,它的执行方式与标准 gmtime_s 函数相同(参数在正确 顺序)。

关于c - 如何在日志文件中引入日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7411301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com