程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言實現的常見日志-abort\log\info\error

C語言實現的常見日志-abort\log\info\error

編輯:關於C語言

有這些時候:我們一個小的項目或者是一個獨立的由幾個文件組成的可執行文件,希望有一些簡單的輸出,包括日志以及異常退出。但是我們又不希望因為這些需求安裝一些類似於glog、log3cpp等日志開源的包,因為我們不需要一些類似於線程安全等之類的調用、就是希望簡單一點,越簡單越好。。。。

是的,就是這樣。

頭文件log.h 如下


[cpp] 
#ifndef _LOG_H_  
#define _LOG_H_  
 
#ifdef __cplusplus  
extern "C" { 
#endif  
 
extern void set_syslog(int syslog); 
extern void abort(const char *msg, ...); 
extern void log(const char *msg, ...); 
extern void error(const char *msg, ...); 
extern void info(const char *msg, ...); 
 
#ifdef __cplusplus  

#endif  
 
#endif 

#ifndef _LOG_H_
#define _LOG_H_

#ifdef __cplusplus
extern "C" {
#endif

extern void set_syslog(int syslog);
extern void abort(const char *msg, ...);
extern void log(const char *msg, ...);
extern void error(const char *msg, ...);
extern void info(const char *msg, ...);

#ifdef __cplusplus
}
#endif

#endif
實現文件log.c 如下:


[cpp]
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <stdarg.h>  
 
#if HAVE_SYSLOG_H  
# include <syslog.h>  
#endif  
 
static int _syslog = 0; 
 
void set_syslog(int syslog) 

  _syslog = syslog; 

 
void abort(const char *msg, ...) 

  va_list ap; 
  va_start(ap, msg); 
#if HAVE_VSYSLOG  
  if(_syslog) { 
          vsyslog(LOG_ERR, msg, ap); 
  } else 
#endif  
          vprintf(msg, ap); 
  va_end(ap); 
  exit(1); 

 
void log(const char *msg, ...) 

  va_list ap; 
  if(_debug) { 
    va_start(ap, msg); 
#if HAVE_VSYSLOG  
    if(_syslog) { 
                vsyslog(LOG_DEBUG, msg, ap); 
        } else 
#endif  
                vprintf(msg, ap); 
    va_end(ap); 
  } 

 
 
void error(const char *msg, ...) 

  va_list ap; 
  va_start(ap, msg); 
#if HAVE_VSYSLOG  
    if(_syslog) { 
                vsyslog(LOG_ERR, msg, ap); 
        } else 
#endif  
                vfprintf(stderr, msg, ap); 
  va_end(ap); 

 
 
void info(const char *msg, ...) 

  va_list ap; 
  va_start(ap, msg); 
#if HAVE_VSYSLOG  
    if(_syslog) { 
                vsyslog(LOG_INFO, msg, ap); 
        } else 
#endif  
                vfprintf(stderr, msg, ap); 
  va_end(ap); 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

#if HAVE_SYSLOG_H
# include <syslog.h>
#endif

static int _syslog = 0;

void set_syslog(int syslog)
{
  _syslog = syslog;
}

void abort(const char *msg, ...)
{
  va_list ap;
  va_start(ap, msg);
#if HAVE_VSYSLOG
  if(_syslog) {
          vsyslog(LOG_ERR, msg, ap);
  } else
#endif
          vprintf(msg, ap);
  va_end(ap);
  exit(1);
}

void log(const char *msg, ...)
{
  va_list ap;
  if(_debug) {
    va_start(ap, msg);
#if HAVE_VSYSLOG
    if(_syslog) {
                vsyslog(LOG_DEBUG, msg, ap);
        } else
#endif
                vprintf(msg, ap);
    va_end(ap);
  }
}


void error(const char *msg, ...)
{
  va_list ap;
  va_start(ap, msg);
#if HAVE_VSYSLOG
    if(_syslog) {
                vsyslog(LOG_ERR, msg, ap);
        } else
#endif
                vfprintf(stderr, msg, ap);
  va_end(ap);
}


void info(const char *msg, ...)
{
  va_list ap;
  va_start(ap, msg);
#if HAVE_VSYSLOG
    if(_syslog) {
                vsyslog(LOG_INFO, msg, ap);
        } else
#endif
                vfprintf(stderr, msg, ap);
  va_end(ap);
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved