diff options
Diffstat (limited to 'logd.cpp')
| -rw-r--r-- | logd.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/logd.cpp b/logd.cpp new file mode 100644 index 0000000..cfdc7c6 --- /dev/null +++ b/logd.cpp @@ -0,0 +1,65 @@ +#ifndef LOGD_CXX +#define LOGD_CXX + +#include "logd.h" + +logd::logd( string filename ) +{ + if(filename.empty()) + { + cerr << "ycLog: No filename specified" << endl; + exit(1); + } + + s_logfile=filename; + + i_lines=s_tool::string2int( s_conf::get().get_val("LOG_LINES")); + +} +void logd::flush() +{ + s_output.open(s_logfile.c_str(), ios::app); + + if(s_output==NULL) + { + cerr << "ycLog: Could not open file: " << s_logfile << endl; + exit(1); + } + + + while(!s_queue.empty()) + { + string s_l=s_queue.front(); + s_queue.pop(); + s_output.write(s_l.c_str(), s_l.size()); + + } + s_output.close(); +} +void logd::log( map_string request ) +{ + struct tm *t_m; + time_t t_cur=time(NULL); + t_m=gmtime(&t_cur); + + char buffer[100]; + strftime(buffer, 100, "[%d/%b/%Y:%H:%M:%S %z]", t_m); + string s_time=buffer; + string s_logstr = request["REMOTE_ADDR"] + " - - "+s_time+" \"" + request["QUERY_STRING"]+"\" 200 0 \""+request["request"]+"\" \""+request["User-Agent"]+"\"\n"; + + s_queue.push(s_logstr); + + if(s_queue.size()>=i_lines) + flush(); +} + +logd::~logd() +{ + flush(); +} + + + + + +#endif |
