summaryrefslogtreecommitdiff
path: root/src/logd.cpp
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2013-04-06 13:14:45 +0200
committerPaul Buetow <paul@buetow.org>2013-04-06 13:14:45 +0200
commit9dcec1feba68dc5ba38cdc634f5bf113c0f77348 (patch)
tree1d3b0191f4377b0b93ebc67b989e4b8a4f9c3671 /src/logd.cpp
parentd34015c5ba231b95de20e9fcd7a33c5b2b9a1006 (diff)
tagging yhttpd-0.7.2yhttpd-0.7.2
Diffstat (limited to 'src/logd.cpp')
-rwxr-xr-x[-rw-r--r--]src/logd.cpp163
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