diff options
| author | Paul Buetow <paul@buetow.org> | 2013-04-06 13:14:45 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2013-04-06 13:14:45 +0200 |
| commit | 9dcec1feba68dc5ba38cdc634f5bf113c0f77348 (patch) | |
| tree | 1d3b0191f4377b0b93ebc67b989e4b8a4f9c3671 /src/logd.cpp | |
| parent | d34015c5ba231b95de20e9fcd7a33c5b2b9a1006 (diff) | |
tagging yhttpd-0.7.2yhttpd-0.7.2
Diffstat (limited to 'src/logd.cpp')
| -rwxr-xr-x[-rw-r--r--] | src/logd.cpp | 163 |
1 files changed, 136 insertions, 27 deletions
diff --git a/src/logd.cpp b/src/logd.cpp index 63c2a64..e120fd8 100644..100755 --- a/src/logd.cpp +++ b/src/logd.cpp @@ -1,66 +1,175 @@ -#ifndef LOGD_CXX -#define LOGD_CXX + +#ifndef LOGD_CPP +#define LOGD_CPP #include "logd.h" -logd::logd( string filename ) +#ifdef LOGGING + +#include <fstream> + +logd::logd( string s_filename, string s_log_lines ) +{ + initialize( s_filename, tool::string2int(s_log_lines) ); +} + +logd::logd( string s_filename, int i_log_lines ) +{ + initialize( s_filename, i_log_lines ); +} + +logd::~logd() { - if(filename.empty()) + flush_logs(); + pthread_mutex_destroy( &mut_s_logging ); +} + +void +logd::initialize( string s_filename, int i_log_lines ) +{ + pthread_mutex_init( &mut_s_logging, NULL ); + + if( s_filename.empty() ) { - cerr << "ycLog: No filename specified" << endl; + wrap::system_message( LOGERR2 ); exit(1); } - s_logfile=filename; + //if (wrap::NCUR->is_ready()) + // wrap::system_message(LOGGINI+s_filename); - i_lines=s_tool::string2int( s_conf::get - ().get_val("LOG_LINES")); + s_logfile = s_filename; + i_lines = i_log_lines; +} + +string +logd::get_time_string() +{ + struct tm *t_m; + time_t t_cur = time(NULL); + t_m = gmtime(&t_cur); + char c_buf[100]; + c_buf[99] = '\0'; + strftime(c_buf, 100, "[%d/%b/%Y:%H:%M:%S %z]", t_m); + + return string(c_buf); } -void logd::flush() + +void +logd::flush() { - s_output.open(s_logfile.c_str(), ios::app); + ofstream of_output; + of_output.open(s_logfile.c_str(), ios::app); - if(s_output==NULL) + if( of_output == NULL ) { - cerr << "ycLog: Could not open file: " << s_logfile << endl; + wrap::system_message( LOGERR1 + s_logfile ); exit(1); } - - while(!s_queue.empty()) + while( ! s_queue.empty() ) { string s_l=s_queue.front(); s_queue.pop(); - s_output.write(s_l.c_str(), s_l.size()); - + of_output.write( s_l.c_str(), s_l.size() ); } - s_output.close(); + + of_output.close(); } -void logd::log( map_string request ) + +void +logd::log_access( map<string,string> &map_request ) { - struct tm *t_m; - time_t t_cur=time(NULL); - t_m=gmtime(&t_cur); + //static int i_access_lines = wrap::CONF->get_elem("httpd.logging.accesslines"); - 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"; + string s_time = get_time_string(); + string s_logstr = map_request["REMOTE_ADDR"] + " - - "+s_time+" \"" + map_request["QUERY_STRING"]+"\" 200 0 \""+map_request["request"]+"\" \""+map_request["User-Agent"]+"\"\n"; + pthread_mutex_lock ( &mut_s_logging ); s_queue.push(s_logstr); - if(s_queue.size()>=i_lines) + if ( s_queue.size() > i_lines ) flush(); + + pthread_mutex_unlock( &mut_s_logging ); } -logd::~logd() +void +logd::log_simple_line( string s_line ) { + // Dont log empty lines! + if (s_line.empty()) + return; + + string s_time = get_time_string(); + string s_logstr = s_time + " " + s_line; + + pthread_mutex_lock ( &mut_s_logging ); + s_queue.push(s_logstr); + + if ( s_queue.size() > i_lines ) + flush(); + + pthread_mutex_unlock( &mut_s_logging ); +} + +void +logd::set_logfile( string s_path, string s_filename ) +{ + // Remove "/" from filename! + unsigned i_pos = s_filename.find( "/" ); + while ( i_pos != string::npos ) + { + s_filename.replace( i_pos, 1, "SLASH" ); + i_pos = s_filename.find( "/" ); + } + + // Remove "\" from filename (for non unix systems)! + i_pos = s_filename.find( "\\" ); + while ( i_pos != string::npos ) + { + s_filename.replace( i_pos, 1, "BACKSLASH" ); + i_pos = s_filename.find( "\\" ); + } + + pthread_mutex_lock ( &mut_s_logging ); + this->s_logfile = s_path + s_filename; + pthread_mutex_unlock( &mut_s_logging ); +} + +void +logd::flush_logs() +{ + pthread_mutex_lock ( &mut_s_logging ); flush(); + pthread_mutex_unlock( &mut_s_logging ); } +string +logd::remove_html_tags( string s_logs ) +{ + unsigned pos[2]; + while ( (pos[0] = s_logs.find("<")) != string::npos ) + { + if ( (pos[1] = s_logs.find(">", pos[0])) != string::npos ) + s_logs.replace( pos[0], pos[1]-pos[0]+1, ""); + else + break; + } + + if ( s_logs == "\n" ) + return ""; + return s_logs; +} +void +logd::set_lines( const int i_lines ) +{ + this->i_lines = i_lines; +} #endif +#endif |
