📄 log.cxx
字号:
/* * * C++ Portable Types Library (PTypes) * Version 1.7.5 Released 9-Mar-2003 * * Copyright (c) 2001, 2002, 2003 Hovik Melikyan * * http://www.melikyan.com/ptypes/ * http://ptypes.sourceforge.net/ * */#include <stdio.h>#include <stdarg.h>#ifndef WIN32# include <syslog.h>#endif#include <ptime.h>#include <pasync.h>#include "config.h"#include "log.h"USING_PTYPESFILE* htlog = stderr;FILE* errlog = stderr;#ifdef WIN32# define vsnprintf _vsnprintf#endifvoid log_init(){#ifndef WIN32 if (cfg_syslog) openlog(myname, 0, LOG_USER);#endif}void log_done(){#ifndef WIN32 if (cfg_syslog) closelog();#endif}void syslog_write(log_severity_t pri, const char* fmt, ...){ char buf[2048]; va_list va; va_start(va, fmt); vsnprintf(buf, sizeof(buf), fmt, va);#ifndef WIN32 if (cfg_syslog) { // syslog is available only on Unix static int upri[4] = {LOG_CRIT, LOG_ERR, LOG_WARNING, LOG_INFO}; syslog(upri[pri], "%s", buf); }#endif if (errlog != 0) { static pconst spri[4] = {"FATAL: ", "Error: ", "", ""}; fprintf(errlog, "%s: %s %s%s\n", myname, pconst(nowstring("%d-%b-%Y %H:%M:%S")), spri[pri], buf); fflush(errlog); } va_end(va);}void htlog_write(ipaddress ip, string request, int code, large size, string referer){ if (htlog == 0) return; if (isempty(referer)) referer = '-'; int t = tzoffset(); bool neg = t < 0; if (neg) t = -t; string ssize; if (size < 0) ssize = '-'; else ssize = itostring(size); string sdate = nowstring("%d/%b/%Y:%H:%M:%S", false); if (cfg_log_referer) referer = " \"" + referer + '\"'; else clear(referer); fprintf(htlog, "%s - - [%s %c%02d%02d] \"%s\" %d %s%s\n", pconst(iptostring(ip)), pconst(sdate), neg ? '-' : '+', t / 60, t % 60, pconst(request), code, pconst(ssize), pconst(referer)); fflush(htlog);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -