2016-01-13 33 views

回答

1

你可以這樣寫

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

int 
mysyslog(int __level, const char *const syslogformat, ...) 
{ 
    va_list args; 
    char *format; 
    size_t length; 
    char *level; 
    ssize_t result; 

    va_start(args,syslogformat); 

    level = "?"; 
    switch (__level) 
    { 
     case LOG_ALERT: 
      level = "LOG_ALERT"; 
      break; 
     case LOG_INFO: 
      level = "LOG_INFO"; 
      break; 
     case LOG_EMERG: 
      level = "LOG_EMERG"; 
      break; 
     case LOG_CRIT: 
      level = "LOG_CRIT"; 
      break; 
     case LOG_ERR: 
      level = "LOG_ERR"; 
      break; 
     case LOG_WARNING: 
      level = "LOG_WARNING"; 
      break; 
     case LOG_NOTICE: 
      level = "LOG_NOTICE"; 
      break; 
     case LOG_DEBUG: 
      level = "LOG_DEBUG"; 
      break; 
    } 

    length = strlen(syslogformat) + strlen(level) + 2; 
    format = malloc(length + 1); 
    result = snprintf(format, length + 1, "%s: %s", level, syslogformat); 
    if ((result < 0) || (result >= length + 1)) 
     return -1; 
    vsyslog(__level, format, args); 
    va_end(args); 

    return 0; 
} 

int main(void) 
{ 
    mysyslog(LOG_NOTICE, "This is a log message `%d' with an integer as parameter\n", 100); 
    return 0; 
} 
0

的包裝功能只需使用爲目標文件中,你specifie將如何顯示/寫入日誌消息的模板;像這樣的東西只顯示系統日誌級別和消息:

template t_example { template("${LEVEL}" "${MSG}"); }; 

destination d_example { file("/var/log/example.log" template(t_example)); }; 
相關問題