设为首页 加入收藏

TOP

日志模块的C语言实现(一)
2013-07-22 17:55:06 来源: 作者: 【 】 浏览:436
Tags:日志 模块 语言 实现

  模块接口

  模块接口比较简单,因为主要只有写日志的操作。

  创建日志模块变量

  [cpp]

  log_t log_new(log_type_t type,const char *file, const char *facility);

  log_type_t用于控制日志的类型,可以标识为系统日志,文件以及标准输出,是一个枚举类型,定义如下:

  [cpp]

  typedef enum {

  log_STDOUT,

  log_SYSLOG,

  log_FILE

  } log_type_t;

  file:这个字段有两种意思,如果日志类型为文件时,该字段表示文件名。如果日志类型为系统日志,该字段表示ident值。

  facility:这个参数用于指明记录日志的程序的类型,我们传递的格式都是系统保留的,并且以这种形式传递local3。

  写日志

  [cpp]

  void  log_write(log_t log, int level, const char *msgfmt, ...);

  level表示写入日志的级别,如:通告,错误,警告之类的,可以按照通用的错误类型划分。分别定义字符串如下:

  [html]

  static const char *_log_level[] =

  {

  "emergency",

  "alert",

  "critical",

  "error",

  "warning",

  "notice",

  "info",

  "debug"

  };

  释放日志模块变量

  [cpp]

  void  log_free(log_t log);

  二,数据结构

  定义数据结构如下:

  [cpp]

  typedef struct log_st

  {

  log_type_t  type;

  FILE        *file;

  } *log_t;

  只有日志类型和一个文件结构指针。

  下面说一下记录日志的程序类型,主要有以下几种日志程序的类型:

  [html]

  LOG_AUTH :安全/授权消息

  LOG_AUTHPRIV:安全/授权消息

  LOG_CRON:时间守护进程(cron和at)专用

  LOG_DAEMON:其它系统守护进程

  LOG_KERN:核心消息

  LOG_LOCAL0到LOG_LOCAL7:系统保留

  LOG_LPR:printer子系统

  LOG_MAIL:mail子系统

  LOG_NEWS:USENET新闻子系统

  LOG_SYSLOG:syslogd进程内部所产生的消息

  LOG_USER(缺省):一般使用者缺省使用消息

  LOG_UUCP:UUCP子系统

  LOG_FTP:FTP子系统使用

  我们在这里用的是系统保留,也就是只有LOG_LOCAL0到LOG_LOCAL7,那就要求必须重新封装,以做到以下两点:

  如果传递的facility不属于local0~local7,就默认local0~local7中的一个。

  需要将传递的local0转换成LOG_LOCAL0,以此类推。

  这里为什么传递local0,而不直接传递LOG_LOCAL0?直接传递也是可以的,只所以传递字符串,是因为大多数的日志都是在配置文件中,而配置文件以字符串的形式存取。而LOG_LOCAL0,并不是一个固定的整数值。

  [cpp]

  typedef struct log_facility_st

  {

  const char  *facility;

  int         number;

  } log_facility_t;

  static log_facility_t _log_facilities[] = {

  { "local0", LOG_LOCAL0 },

  { "local1", LOG_LOCAL1 },

  { "local2", LOG_LOCAL2 },

  { "local3", LOG_LOCAL3 },

  { "local4", LOG_LOCAL4 },

  { "local5", LOG_LOCAL5 },

  { "local6", LOG_LOCAL6 },

  { "local7", LOG_LOCAL7 },

  { NULL, -1 }

  };

     

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇利用C语言找出直系亲属 下一篇C中结构体大小的计算

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: