aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/log.cc1
-rw-r--r--lib/log.h54
2 files changed, 54 insertions, 1 deletions
diff --git a/lib/log.cc b/lib/log.cc
index 7932e84..79a6a35 100644
--- a/lib/log.cc
+++ b/lib/log.cc
@@ -15,6 +15,7 @@ int logbuf::overflow(int c) {
*ptr = '\0';
syslog(level, buf);
ptr = buf;
+ len = 0;
return 0;
}
if ((len + 2) >= sizeof(buf))
diff --git a/lib/log.h b/lib/log.h
index 740bced..7a6528d 100644
--- a/lib/log.h
+++ b/lib/log.h
@@ -7,14 +7,66 @@
#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:
- logbuf(int);
+
+ /**
+ * Constructs a new instance.
+ *
+ * @param level The log level for this instance.
+ * see syslog(3) for symbolic names to use.
+ */
+ logbuf(int level);
+
+ /**
+ * @internal 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.
+ */
int len;
+
+ /**
+ * The log level to use with syslog.
+ */
int level;
+
+ /**
+ * The internal buffer for holding
+ * messages.
+ */
char buf[1024];
};