1. 自己写debuglog(),将日志写入指定日志文件。
包含三个函数
void open_debug_log();// 打开日志文件
void debug_log(int level, char*fmt...);// 记录日志
void close_debug_log() // 关闭日志文件
==========================源码========================
#include <stdio.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#define DEBUG_LOG_FILE "/tmp/debug.log"
#define DEBUG_LOG_SIZE 1024*1024
const int switch_on_off=1;
FILE *log_fp=NULL;
void open_debug_log()
{
struct stat st;
stat(DEBUG_LOG_FILE, &st);
if(st.st_size > DEBUG_LOG_SIZE)
log_fp=fopen(DEBUG_LOG_FILE, "w+");
else
log_fp=fopen(DEBUG_LOG_FILE, "a+");
}
void debug_log(int level, char *fmt, ...)
{
if(!switch_on_off || !level)
return;
char tmp[1024]={0};
va_list args;
va_start(args,fmt);
vsnprintf(tmp, sizeof(tmp), fmt, args);
va_end(args);
fprintf(log_fp,"%s\n", tmp);
}
void close_debug_log()
{
if(log_fp)
fclose(log_fp);
log_fp=NULL;
}
==========================源码========================
2.将标准输出,标准出错重定向到指定文件。
#include <stdio.h>
#include <unistd.h>
int log_func(void)
{
FILE *fp=fopen("./debug.log", "a+");
dup2(fileno(fp),fileno(stdout) );
dup2(fileno(fp),fileno(stderr) );
fclose(fp);
fprintf(stderr , "write to stderr\n");
fprintf(stdout , "write to stdout\n");
return 0;
}
3.借助系统日志文件syslog,将syslog重定向到指定文件。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <syslog.h>
#include <unistd.h>
int main(void)
{
int logfd=open("/tmp/server.log", O_RDWR|O_CREAT|O_APPEND, 0644);
dup2(logfd, STDERR_FILENO);
openlog(NULL, LOG_PERROR, LOG_DAEMON);
syslog(LOG_DEBUG,"test syslog");
closelog();}