diff options
Diffstat (limited to 'src/logd.cpp')
| -rw-r--r--[-rwxr-xr-x] | src/logd.cpp | 163 |
1 files changed, 27 insertions, 136 deletions
diff --git a/src/logd.cpp b/src/logd.cpp index 664cd14..63c2a64 100755..100644 --- a/src/logd.cpp +++ b/src/logd.cpp @@ -1,175 +1,66 @@ - -#ifndef LOGD_CPP -#define LOGD_CPP +#ifndef LOGD_CXX +#define LOGD_CXX #include "logd.h" -#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() +logd::logd( string filename ) { - 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() ) + if(filename.empty()) { - wrap::system_message( LOGERR2 ); + cerr << "ycLog: No filename specified" << endl; exit(1); } - //if (wrap::NCUR->is_ready()) - // wrap::system_message(LOGGINI+s_filename); + s_logfile=filename; - 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); + i_lines=s_tool::string2int( s_conf::get + ().get_val("LOG_LINES")); - 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() { - ofstream of_output; - of_output.open(s_logfile.c_str(), ios::app); + s_output.open(s_logfile.c_str(), ios::app); - if( of_output == NULL ) + if(s_output==NULL) { - wrap::system_message( LOGERR1 + s_logfile ); + cerr << "ycLog: Could not open file: " << s_logfile << endl; exit(1); } - while( ! s_queue.empty() ) + + while(!s_queue.empty()) { string s_l=s_queue.front(); s_queue.pop(); - of_output.write( s_l.c_str(), s_l.size() ); - } - - of_output.close(); -} - -void -logd::log_access( map<string,string> &map_request ) -{ - //static int i_access_lines = wrap::CONF->get_elem("httpd.logging.access_lines"); - - 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"; + s_output.write(s_l.c_str(), s_l.size()); - pthread_mutex_lock ( &mut_s_logging ); - s_queue.push(s_logstr); - - if ( s_queue.size() > i_lines ) - flush(); - - pthread_mutex_unlock( &mut_s_logging ); + } + s_output.close(); } - -void -logd::log_simple_line( string s_line ) +void logd::log( map_string request ) { - // Dont log empty lines! - if (s_line.empty()) - return; + struct tm *t_m; + time_t t_cur=time(NULL); + t_m=gmtime(&t_cur); - string s_time = get_time_string(); - string s_logstr = s_time + " " + s_line; + 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"; - 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 ); -} - -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() +logd::~logd() { - 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 |
