IBR-DTNSuite
0.8
|
00001 /* 00002 * File: SyslogStream.cpp 00003 * Author: morgenro 00004 * 00005 * Created on 17. November 2009, 13:43 00006 */ 00007 00008 #include "ibrcommon/config.h" 00009 #include "ibrcommon/SyslogStream.h" 00010 #include <syslog.h> 00011 00012 namespace ibrcommon 00013 { 00014 std::ostream &slog = SyslogStream::getStream(); 00015 00016 SyslogStream::SyslogStream() : m_buf( BUF_SIZE+1 ), _prio(SYSLOG_INFO) 00017 { 00018 setp( &m_buf[0], &m_buf[0] + (m_buf.size()-1) ); 00019 } 00020 00021 SyslogStream::~SyslogStream() 00022 { 00023 } 00024 00025 void SyslogStream::open(char *name, int option, int facility) 00026 { 00027 ::openlog(name, option, facility); 00028 } 00029 00030 std::ostream& SyslogStream::getStream() 00031 { 00032 static SyslogStream syslogbuf; 00033 static std::ostream stream(&syslogbuf); 00034 00035 return stream; 00036 } 00037 00038 int SyslogStream::sync() 00039 { 00040 if( pptr() > pbase() ) 00041 writeToDevice(); 00042 return 0; // 0 := Ok 00043 } 00044 00045 void SyslogStream::setPriority(const SyslogPriority &prio) 00046 { 00047 _prio = prio; 00048 } 00049 00050 void SyslogStream::writeToDevice() 00051 { 00052 *pptr() = 0; // End Of String 00053 ::syslog( _prio, "%s", pbase() ); 00054 setp( &m_buf[0], &m_buf[0] + (m_buf.size()-1) ); 00055 } 00056 00057 std::ostream &operator<<(std::ostream &stream, const SyslogPriority &prio) 00058 { 00059 SyslogStream *slog = dynamic_cast<SyslogStream*>(stream.rdbuf()); 00060 00061 if (slog != NULL) 00062 { 00063 slog->setPriority(prio); 00064 } 00065 else 00066 { 00067 const char data = prio; 00068 stream.write(&data, sizeof(char)); 00069 } 00070 00071 return stream; 00072 } 00073 }