summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <abaumann@yahoo.com>2012-09-05 16:44:27 +0200
committerAndreas Baumann <abaumann@yahoo.com>2012-09-05 16:44:27 +0200
commit2e2ef8b0d481bdde9c727defe51b2a31ddbc0c52 (patch)
tree1c2d4b1025c8f655c0c95f1dbd9f848258fb9059
parenteb1a37eb3dedb7bce6635faccc11ad83229e0622 (diff)
downloadcrawler-2e2ef8b0d481bdde9c727defe51b2a31ddbc0c52.tar.gz
crawler-2e2ef8b0d481bdde9c727defe51b2a31ddbc0c52.tar.bz2
added Windows WinDbg log sink
some renames and cleanups
-rwxr-xr-x[-rw-r--r--]src/ConsoleLogSink.cpp2
-rwxr-xr-xsrc/GNUmakefile2
-rwxr-xr-x[-rw-r--r--]src/Logger.cpp21
-rwxr-xr-xsrc/Logger.hpp1
-rwxr-xr-xsrc/Makefile.W323
-rwxr-xr-xsrc/SyslogLogSink.cpp (renamed from src/SyslogSink.cpp)12
-rwxr-xr-xsrc/SyslogLogSink.hpp (renamed from src/SyslogSink.hpp)6
-rwxr-xr-xsrc/WinDbgLogSink.cpp22
-rwxr-xr-xsrc/WinDbgLogSink.hpp14
-rwxr-xr-x[-rw-r--r--]tests/logger/test1.cpp1
10 files changed, 70 insertions, 14 deletions
diff --git a/src/ConsoleLogSink.cpp b/src/ConsoleLogSink.cpp
index e986961..84a1ebd 100644..100755
--- a/src/ConsoleLogSink.cpp
+++ b/src/ConsoleLogSink.cpp
@@ -4,7 +4,7 @@
using namespace std;
-void ConsoleLogSink::log( const LogLevel level, const std::string &msg )
+void ConsoleLogSink::log( const LogLevel level, const string &msg )
{
if( level > reportingLevel( ) ) return;
diff --git a/src/GNUmakefile b/src/GNUmakefile
index 267e69c..d44dd97 100755
--- a/src/GNUmakefile
+++ b/src/GNUmakefile
@@ -34,7 +34,7 @@ CPP_OBJS = \
Logger.o \
ConsoleLogSink.o \
FileLogSink.o \
- SyslogSink.o \
+ SyslogLogSink.o \
URL.o \
MIMEType.o \
SpoolRewindInputStream.o
diff --git a/src/Logger.cpp b/src/Logger.cpp
index 726b6fc..57b1341 100644..100755
--- a/src/Logger.cpp
+++ b/src/Logger.cpp
@@ -2,7 +2,10 @@
#include "LogSink.hpp"
#include "ConsoleLogSink.hpp"
#include "FileLogSink.hpp"
-#include "SyslogSink.hpp"
+#include "SyslogLogSink.hpp"
+#ifdef _WIN32
+#include "WinDbgLogSink.hpp"
+#endif
#include <algorithm>
#include <list>
@@ -40,6 +43,7 @@ class LoggerImpl
void openConsoleLog( const LogLevel level );
void openFileLog( const LogLevel level, const std::string &filename );
void openSyslog( const LogLevel level, const string &ident, const string &facility );
+ void openWinDbgLog( const LogLevel level );
public:
LoggerImpl( );
@@ -96,7 +100,16 @@ void LoggerImpl::openFileLog( const LogLevel level, const string &filename )
void LoggerImpl::openSyslog( const LogLevel level, const string &ident, const string &facility )
{
- addSink( new SyslogSink( level, ident, facility ) );
+ addSink( new SyslogLogSink( level, ident, facility ) );
+}
+
+void LoggerImpl::openWinDbgLog( const LogLevel level )
+{
+#ifdef _WIN32
+ addSink( new WinDbgLogSink( level ) );
+#else
+ LOG( logWARNING ) << "WinDbg logger is only available on Windows";
+#endif
}
string Logger::toString( const LogLevel level )
@@ -163,3 +176,7 @@ void Logger::openSyslog( const LogLevel level, const string &ident, const string
m_impl->openSyslog( level, ident, facility );
}
+void Logger::openWinDbgLog( const LogLevel level )
+{
+ m_impl->openWinDbgLog( level );
+}
diff --git a/src/Logger.hpp b/src/Logger.hpp
index ad75b2e..dc514ae 100755
--- a/src/Logger.hpp
+++ b/src/Logger.hpp
@@ -39,6 +39,7 @@ class Logger : public Singleton< Logger >
void openConsoleLog( const LogLevel level );
void openFileLog( const LogLevel level, const std::string &filename );
void openSyslog( const LogLevel level, const std::string &ident, const std::string &facility );
+ void openWinDbgLog( const LogLevel level );
protected:
Logger( );
diff --git a/src/Makefile.W32 b/src/Makefile.W32
index 6fe442f..7426c18 100755
--- a/src/Makefile.W32
+++ b/src/Makefile.W32
@@ -22,7 +22,8 @@ LOCAL_STATIC_LIB_OBJS = \
Logger.obj \
ConsoleLogSink.obj \
FileLogSink.obj \
- SyslogSink.obj \
+ SyslogLogSink.obj \
+ WinDbgLogSink.obj \
URL.obj \
MIMEType.obj \
SpoolRewindInputStream.obj
diff --git a/src/SyslogSink.cpp b/src/SyslogLogSink.cpp
index 5f9715e..c2716a9 100755
--- a/src/SyslogSink.cpp
+++ b/src/SyslogLogSink.cpp
@@ -1,4 +1,4 @@
-#include "SyslogSink.hpp"
+#include "SyslogLogSink.hpp"
#ifndef _WIN32
#include <syslog.h>
@@ -8,25 +8,25 @@
using namespace std;
-SyslogSink::SyslogSink( const LogLevel level, const string &ident, const string &facility )
+SyslogLogSink::SyslogLogSink( const LogLevel level, const string &ident, const string &facility )
: LogSink( level ), m_ident( ident ), m_facility( facility )
{
openlog( m_ident.c_str( ), LOG_PID, facilityFromString( m_facility ) );
}
-SyslogSink::~SyslogSink( )
+SyslogLogSink::~SyslogLogSink( )
{
closelog( );
}
-void SyslogSink::log( const LogLevel level, const string &msg )
+void SyslogLogSink::log( const LogLevel level, const string &msg )
{
if( level > reportingLevel( ) ) return;
syslog( levelToSyslogLevel( level ), "%s", msg.c_str( ) );
}
-int SyslogSink::levelToSyslogLevel( const LogLevel level )
+int SyslogLogSink::levelToSyslogLevel( const LogLevel level )
{
switch( level ) {
case logFATAL: return LOG_ALERT;
@@ -48,7 +48,7 @@ int SyslogSink::levelToSyslogLevel( const LogLevel level )
}
}
-int SyslogSink::facilityFromString( const std::string &facility )
+int SyslogLogSink::facilityFromString( const std::string &facility )
{
if( facility == "kern" ) return LOG_KERN;
else if( facility == "user" ) return LOG_USER;
diff --git a/src/SyslogSink.hpp b/src/SyslogLogSink.hpp
index 5a879d5..64e52f1 100755
--- a/src/SyslogSink.hpp
+++ b/src/SyslogLogSink.hpp
@@ -5,12 +5,12 @@
#include <string>
-class SyslogSink : public LogSink
+class SyslogLogSink : public LogSink
{
public:
- SyslogSink( const LogLevel level, const std::string &ident, const std::string &facility );
+ SyslogLogSink( const LogLevel level, const std::string &ident, const std::string &facility );
- ~SyslogSink( );
+ ~SyslogLogSink( );
void log( const LogLevel level, const std::string &msg );
diff --git a/src/WinDbgLogSink.cpp b/src/WinDbgLogSink.cpp
new file mode 100755
index 0000000..f5a830c
--- /dev/null
+++ b/src/WinDbgLogSink.cpp
@@ -0,0 +1,22 @@
+#include "WinDbgLogSink.hpp"
+
+#include <sstream>
+
+#define WIN32_MEAN_AND_LEAN
+#include <windows.h>
+
+using namespace std;
+
+void WinDbgLogSink::log( const LogLevel level, const string &msg )
+{
+ if( level > reportingLevel( ) ) return;
+
+ ostringstream ss;
+
+ ss << Logger::toString( level )
+ << ": "
+ << msg
+ << "\r\n";
+
+ OutputDebugString( ss.str( ).c_str( ) );
+}
diff --git a/src/WinDbgLogSink.hpp b/src/WinDbgLogSink.hpp
new file mode 100755
index 0000000..f7caa86
--- /dev/null
+++ b/src/WinDbgLogSink.hpp
@@ -0,0 +1,14 @@
+#ifndef __WINDBG_LOGSINK_H
+#define __WINDBG_LOGSINK_H
+
+#include "LogSink.hpp"
+
+class WinDbgLogSink : public LogSink
+{
+ public:
+ WinDbgLogSink( const LogLevel level ) : LogSink( level ) { }
+
+ void log( const LogLevel level, const std::string &msg );
+};
+
+#endif
diff --git a/tests/logger/test1.cpp b/tests/logger/test1.cpp
index d334ec0..495996f 100644..100755
--- a/tests/logger/test1.cpp
+++ b/tests/logger/test1.cpp
@@ -12,6 +12,7 @@ int main( void )
Logger::instance( ).addSink( sink );
Logger::instance( ).openFileLog( logNOTICE, "test1.log" );
Logger::instance( ).openSyslog( logNOTICE, "test1", "user" );
+ Logger::instance( ).openWinDbgLog( logNOTICE );
LOG( logFATAL ) << "fatal error";
LOG( logCRITICAL ) << "critical error";