📄 myproxy_log.c
字号:
/* * myproxy_log.c * * See myproxy_log.h for documentation. */#include "myproxy_common.h" /* all needed headers included here *//********************************************************************** * * Internal Variables * */struct myproxy_log_context { int syslog_facility; char *syslog_name; int debug_level; FILE *log_stream;};static struct myproxy_log_context my_context = { 0, NULL, 0, NULL};/********************************************************************** * * Internal Functions * *//* * do_log() * * Do the actual logging of the given string. */static voiddo_log(const char *string, int level){ /* * We always want to use '"%s", string' when logging in case * string itself contains a '%s". */ if (my_context.syslog_facility != 0) { /* syslog() seems to automatically prepend process name */ syslog(my_context.syslog_facility|level, "<%d> %s", getpid(), string); } if (my_context.log_stream != NULL) { fprintf(my_context.log_stream, "%s\n", string); } return;}/********************************************************************** * * API Functions * */voidmyproxy_log_use_syslog(const int facility, const char *name){ my_context.syslog_facility = facility; my_context.syslog_name = (name == NULL) ? NULL : strdup(name);}voidmyproxy_log_use_stream(FILE *stream){ my_context.log_stream = stream;}voidmyproxy_log(const char *format, ...){ char *string = NULL; va_list ap; va_start(ap, format); string = my_vsnprintf(format, ap); va_end(ap); if (string == NULL) { /* Punt */ goto error; } do_log(string, LOG_NOTICE); error: if (string != NULL) { free(string); } return;}voidmyproxy_log_verror(){ char *string; string = verror_get_string(); if (string != NULL) { do_log(verror_get_string(), LOG_ERR); } if (verror_get_errno() != 0) { do_log(verror_strerror(), LOG_ERR); } return;}voidmyproxy_log_perror(const char *format, ...){ char *string = NULL; va_list ap; va_start(ap, format); string = my_vsnprintf(format, ap); va_end(ap); if (string == NULL) { /* Punt */ goto error; } do_log(string, LOG_ERR); do_log(strerror(errno), LOG_ERR); error: if (string != NULL) { free(string); } return;}voidmyproxy_log_close(){ my_context.syslog_facility = 0; if (my_context.syslog_name != NULL) { free(my_context.syslog_name); my_context.syslog_name = NULL; } my_context.debug_level = 0; my_context.log_stream = NULL;}intmyproxy_debug_set_level(int level){ int old_level = my_context.debug_level; my_context.debug_level = level; return old_level;}voidmyproxy_debug(const char *format, ...){ char *string = NULL; va_list ap; if (my_context.debug_level == 0) { return; } va_start(ap, format); string = my_vsnprintf(format, ap); va_end(ap); if (string == NULL) { /* Punt */ goto error; } do_log(string, LOG_NOTICE); error: if (string != NULL) { free(string); } return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -