⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myproxy_log.c

📁 代理服务器源代码 供大家学习使用,希望大家喜欢
💻 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 + -