📄 log.c
字号:
/* * Copyright (c) 1997, 1998, 1999 * Inferno Nettverk A/S, Norway. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. The above copyright notice, this list of conditions and the following * disclaimer must appear in all copies of the software, derivative works * or modified versions, and any portions thereof, aswell as in all * supporting documentation. * 2. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by * Inferno Nettverk A/S, Norway. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Inferno Nettverk A/S requests users of this software to return to * * Software Distribution Coordinator or sdc@inet.no * Inferno Nettverk A/S * Oslo Research Park * Gaustadal閑n 21 * N-0349 Oslo * Norway * * any improvements or extensions that they make and grant Inferno Nettverk A/S * the rights to redistribute these changes. * */#include "common.h"static const char rcsid[] ="$Id: log.c,v 1.41 1999/12/22 09:29:24 karls Exp $";__BEGIN_DECLSstatic char *logformat __P((int priority, char *buf, size_t buflen, const char *message, va_list ap));/* * formats "message" as appropriate. The formated message is stored * in the buffer "buf", which is of size "buflen". * Returns: * On success: pointer to "buf". * On failure: NULL. */__END_DECLSvoidinitlog(void){#if SOCKS_SERVER /* don't want to override original clients stuff. */ if (config.log.type & LOGTYPE_SYSLOG) { closelog(); /* * LOG_NDELAY so we don't end up in a situation where we * have no free descriptors and haven't yet syslog-ed anything. */ openlog(__progname, LOG_NDELAY | LOG_PID, config.log.facility); }#endif /* SOCKS_SERVER */ if (config.log.type & LOGTYPE_FILE) ;}void#ifdef STDC_HEADERSslog(int priority, const char *message, ...)#elseslog(priority, message, va_alist) int priority; char *message; va_dcl#endif /* STDC_HEADERS */{ va_list ap;#ifdef STDC_HEADERS /* LINTED pointer casts may be troublesome */ va_start(ap, message);#else va_start(ap);#endif /* STDC_HEADERS */ vslog(priority, message, ap); /* LINTED expression has null effect */ va_end(ap);}voidvslog(priority, message, ap) int priority; const char *message; va_list ap;{ const int errno_s = errno; char buf[2048]; if (!config.state.init) { if (logformat(priority, buf, sizeof(buf), message, ap) != NULL) fprintf(stdout, "%s\n", buf); return; } if (config.log.type & LOGTYPE_SYSLOG) vsyslog(priority, message, ap); if (config.log.type & LOGTYPE_FILE) { int i; if (logformat(priority, buf, sizeof(buf), message, ap) == NULL) return; for (i = 0; i < config.log.fpc; ++i) { socks_lock(config.log.fplockv[i], F_WRLCK, -1); fprintf(config.log.fpv[i], "%s\n", buf); socks_unlock(config.log.fplockv[i]); } } errno = errno_s;}static char *logformat(priority, buf, buflen, message, ap) int priority; char *buf; size_t buflen; const char *message; va_list ap;{ const char *prefix; size_t bufused; time_t timenow; /* not sure if we should use this. */ switch (priority) { case LOG_EMERG: prefix = "*** EMERGENCY: "; break; case LOG_ALERT: prefix = "*** ALERT: "; break; case LOG_CRIT: prefix = "*** Critical: "; break; case LOG_ERR: prefix = "error: "; break; case LOG_WARNING: prefix = "warning: "; break; case LOG_NOTICE: prefix = "notice: "; break; case LOG_INFO: prefix = "info: "; break; case LOG_DEBUG: if (config.state.init && !config.option.debug) return NULL; prefix = "debug: "; break; default: prefix = ""; } time(&timenow); bufused = strftime(buf, buflen, "%h %e %T ", localtime(&timenow)); bufused += snprintf(&buf[bufused], buflen - bufused, "%s[%lu]: ", __progname,#if SOCKS_SERVER (unsigned long)config.state.pid#else /* !SOCKS_SERVER, can't trust saved state. */ (unsigned long)getpid()#endif /* !SOCKS_SERVER */ ); vsnprintf(&buf[bufused], buflen - bufused, message, ap); return buf;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -