javasogo 发表于 2013-2-1 11:05:41

[原创]linux c项目log日志系统

简单实用的日志系统,打开文件方式后面用 w时,每次系统运行会清空以前的,部分实现在前一篇文掌的cofig里面

log.h
/*
* File:log.h:日志系统的头文件
* Author: netpet
* Flower net server
* 本程序是为一体化web server产品专用设计,具有部分代码为具体产品优化而不代表普遍通用性的特性
* 程序在linux 2.46下调试通过,编辑工具netbeans 6.1 for c
* 联系方式:Email:netpetboy@163.com QQ:51977431
* Created on 2008年5月26日, 下午4:18
*/

#include "config.h"


#ifndef _LOG_H
#define_LOG_H

#ifdef__cplusplus
extern "C" {
#endif


#define Error(fmt, ...) \
      vlog_debug(config->log.log_log, "[%s %d] 错误: "fmt, __FILE__, __LINE__, __VA_ARGS__)

#define Warning(fmt, ...) \
      vlog_debug(config->log.log_log, "[%s %d] 警告: "fmt, __FILE__, __LINE__, __VA_ARGS__)
#define Record(fmt, ...) \
      vlog_debug(config->log.access_log, "[%s %d] 记录: "fmt, __FILE__, __LINE__, __VA_ARGS__)

#define Debug(fmt, ...) \
      log_debug(__FILE__, __LINE__, fmt, __VA_ARGS__)


extern void log_debug(const char *file, const int line, const char *format,...);
extern void vlog_debug(FILE *file, const char *format,...);

#ifdef__cplusplus
}
#endif

#endif/* _LOG_H */

log.c
/*
* File:log.c:日志系统的实现
* Author: netpet
* Flower net server
* 本程序是为一体化web server产品专用设计,具有部分代码为具体产品优化而不代表普遍通用性的特性
* 程序在linux 2.46下调试通过,编辑工具netbeans 6.1 for c
* 联系方式:Email:netpetboy@163.com QQ:51977431
* Created on 2008年5月26日, 下午4:18
*/
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
#include <errno.h>
#include <string.h>
#include "config.h"
/*
*功能:调试输出函数
*/
void log_debug(const char *file, const int line, const char *format,...)
{
if(!config->log.DebugModel)
    return;
char new_format;

va_listva;
va_start(va, format);

snprintf(new_format, 8191 ,"\n[%s] | [%s %d] %s",ServerTime(), file, line, format);

if(vfprintf(config->log.debug_log, new_format, va) < 0)
    fprintf(stderr, "警告. [%s %d] %s\n", __FILE__, __LINE__, strerror(errno));

va_end(va);
}
/*
*功能:警告或者错误输出函数
*
*/
void vlog_debug(FILE *file, const char *format,...)
{

if(!file)
    return;

static char new_format;

va_listva;
va_start(va, format);

snprintf(new_format,8191 ,"\n[%s] | %s",ServerTime(), format);

if(vfprintf(file, new_format, va) < 0)
    fprintf(stderr, "警告 [%s %d] %s\n", __FILE__, __LINE__, strerror(errno));

va_end(va);
}
页: [1]
查看完整版本: [原创]linux c项目log日志系统