log.cxx

来自「PTypes是一个扩充了多线程和网络功能的STL库」· CXX 代码 · 共 127 行

CXX
127
字号
/* * *  C++ Portable Types Library (PTypes) *  Version 2.0.2  Released 17-May-2004 * *  Copyright (C) 2001-2004 Hovik Melikyan * *  http://www.melikyan.com/ptypes/ * */#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_PTYPEScompref<logfile> htlog;compref<logfile> errlog;#ifdef WIN32#  define vsnprintf _vsnprintf#endifvoid log_init(){    htlog = &perr;    errlog = &perr;#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: ", "", ""};        errlog->putf("%s: %t  %s%s\n", myname, now(), spri[pri], buf);        errlog->flush();    }    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);    try    {        htlog->putf("%a - - [%s %c%02d%02d] \"%s\" %d %s%s\n",            long(ip), pconst(sdate), neg ? '-' : '+', t / 60, t % 60,            pconst(request), code, pconst(ssize), pconst(referer));        htlog->flush();    }    catch (estream* e)    {        delete e;        htlog = 0;        syslog_write(SYSLOG_ERROR, "HTTP log disabled due to failed write attempt (daemonized?)");    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?