如何找出是否有新数据写入日志文件,以及如何提取这些新数据并将它们写入另一个文件?
我的目标是创建一个用于调试的大日志文件,因为如果文件达到特定大小,当前日志文件总是会删除数据。
我唯一的想法是每隔几分钟从旧日志文件创建一个副本。
最佳答案
快速而肮脏的方法是在控制台中键入以下行 - 用实际路径和日志文件替换“path/to/...”和“other/path/...”:
* * * * * /path/to/small_file.log >> /other/path/to/big_file.log
它不会在每次写入时都执行 IO,但它会每分钟执行一次,这可能足以满足您的需求,也可能不足以满足您的需求。
编辑:尝试使用 C 找到更好的方法,这是我到目前为止得到的(阅读我在帖子中的评论以获取更多信息)。
//Include the full pathname and file for LOG_BIG and LOG_SMALL
#define LOG_BIG "/var/.../log_example_big.txt"
#define LOG_SMALL "/var/.../log_example_small.txt"
//FIXME: change LOG_BIG and LOG_SMALL to match the locations of the logfiles
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <math.h>
#include <sys/types.h>
time_t last_mod_time(const char *path);
int main(int argc, const char * argv[]) {
char outstr[200];
time_t t;
struct tm *tmp;
t = time(NULL);
tmp = localtime(&t);
// check for local time set failure
if (tmp == NULL) {
perror("localtime");
return 0;
}
//if the returned size_t for strftime is 0, we exit
if (strftime(outstr, sizeof(outstr), argv[1], tmp) == 0) {
fprintf(stderr, "strftime returned 0");
return 0;
}
double diff_log_mod_time;
// get the difference of last modified time between LOG_BIG and LOG_SMALL
diff_log_mod_time = difftime(last_mod_time(LOG_BIG),last_mod_time(LOG_SMALL));
//difference in log modification times should be close to 0 +/- 10 ... I think
if(fabs(diff_log_mod_time) > 10.0) {
/* to finish the code, we would need to find the difference between the data in LOG_BIG and LOG_SMALL (assuming that LOG_BIG should contain all of LOG_SMALL and then some) */
}
exit(EXIT_SUCCESS);
}
/**
* last_mod_time - this function finds the last modification time for a filename specified and returns
* it in epoch time (seconds lapsed since 1/1/1970)
*/
time_t last_mod_time(const char *path) {
struct stat statbuf;
if (stat(path, &statbuf) == -1) {
perror(path);
exit(1);
}
return statbuf.st_mtime;
}
关于linux - 将日志文件中的新数据附加到另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31646258/