IBR-DTNSuite  0.10
SyslogStream.cpp
Go to the documentation of this file.
1 /*
2  * SyslogStream.cpp
3  *
4  * Copyright (C) 2011 IBR, TU Braunschweig
5  *
6  * Written-by: Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 
22 #include "ibrcommon/config.h"
23 #include "ibrcommon/SyslogStream.h"
24 #include <syslog.h>
25 
26 namespace ibrcommon
27 {
28  std::ostream &slog = SyslogStream::getStream();
29 
30  SyslogStream::SyslogStream() : m_buf( BUF_SIZE+1 ), _prio(SYSLOG_INFO)
31  {
32  setp( &m_buf[0], &m_buf[0] + (m_buf.size()-1) );
33  }
34 
36  {
37  }
38 
39  void SyslogStream::open(char *name, int option, int facility)
40  {
41  ::openlog(name, option, facility);
42  }
43 
44  std::ostream& SyslogStream::getStream()
45  {
46  static SyslogStream syslogbuf;
47  static std::ostream stream(&syslogbuf);
48 
49  return stream;
50  }
51 
53  {
54  if( pptr() > pbase() )
55  writeToDevice();
56  return 0; // 0 := Ok
57  }
58 
60  {
61  _prio = prio;
62  }
63 
64  void SyslogStream::writeToDevice()
65  {
66  *pptr() = 0; // End Of String
67  ::syslog( _prio, "%s", pbase() );
68  setp( &m_buf[0], &m_buf[0] + (m_buf.size()-1) );
69  }
70 
71  std::ostream &operator<<(std::ostream &stream, const SyslogPriority &prio)
72  {
73  SyslogStream *slog = dynamic_cast<SyslogStream*>(stream.rdbuf());
74 
75  if (slog != NULL)
76  {
77  slog->setPriority(prio);
78  }
79  else
80  {
81  const char data = prio;
82  stream.write(&data, sizeof(char));
83  }
84 
85  return stream;
86  }
87 }