aboutsummaryrefslogtreecommitdiffstats
path: root/lib/log.h
blob: 708631fb7169064830ac979c2ee04aca042a7e20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/* $Id$
 */

#ifndef _log_h_
#define _log_h_

#include <ostream.h>
#include <syslog.h>

/**
 * A streambuffer, logging via syslog
 *
 * logbuf can be used, if you want to use syslog for
 * logging but don't want to change all your nice
 * C++-style output statements in your code.
 *
 * Here is an example showing the usage of logbuf:
 *
 * <PRE>
 *	openlog("myDaemon", LOG_CONS|LOG_PID, LOG_DAEMON);
 *	logbuf ebuf(LOG_ERR);
 *	ostream lerr(&ebuf);
 *
 *	... some code ...
 *
 *	lerr << "Whoops, got an error" << endl;
 * </PRE>
 */
class logbuf : public streambuf {
	public:

		/**
		 * Constructs a new instance.
		 *
		 * @param level The log level for this instance.
		 * 	see syslog(3) for symbolic names to use.
		 */
		logbuf(int level);

		/**
		 * Called by the associated
		 * ostream to write a character.
		 * Stores the character in a buffer
		 * and calls syslog(level, buffer)
		 * whenever a LF is seen.
		 */
		int overflow(int c = EOF);

	private:

		/**
		 * Pointer to next char in buffer.
		 */
		char *ptr;

		/**
		 * Current length of buffer.
		 */
		unsigned int len;

		/**
		 * The log level to use with syslog.
		 */
		int level;

		/**
		 * The internal buffer for holding
		 * messages.
		 */
		char buf[1024];
};

#endif