Go to the documentation of this file.00001
00002
00003
00004
00005
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;
00043 }
00044
00045 void SyslogStream::setPriority(const SyslogPriority &prio)
00046 {
00047 _prio = prio;
00048 }
00049
00050 void SyslogStream::writeToDevice()
00051 {
00052 *pptr() = 0;
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 }