FBB::SyslogStream - An output stream inserting syslog messages
Contents
Bobcat
Bobcat is an acronym of `Brokken’s Own Base Classes And Templates’.
Bobcat Project Files
o https://fbb-git.gitlab.io/bobcat/: gitlab project page;
Debian Bobcat project files:
o libbobcat6: debian package containing the shared library, changelog and copyright note;
o libbobcat-dev: debian package containing the static library, headers, manual pages, and developer
info;
Bugs
The constructor’s option parameter is an int. Because of this, int values rather than enumeration values
are passed to the constructor. It is the responsibility of the programmer to pass defined option values
only.
Constructors
o SyslogStream(stringconst&ident="",FBB::Prioritypriority=FBB::NOTICE,FBB::Facilityfacility=FBB::USER,intoption=0):
This constructor initializes a SyslogStream object. The ident parameter is usually the name of
the program. Its content are prepended to syslog messages.
The priority parameter determines the default importance of the message sent to the syslog daemon.
By default messages are sent to the syslog daemon with priority FBB::NOTICE. Syslog messages may
be given different priority by inserting a SyslogStream manipulator (see below). The priority set
at construction time may also be modified using the setPriority and setDefaultPriority members.
Which messages actually appear in log facilities is not determined by the messages’ priorities,
but by syslog’s logmask. The log mask can be set by the static member setMask (see below).
The facility parameter determines the type of program doing the logging. By default FBB::USER is
used.
The option parameter may be used to specify various options (use the binary `bitor’ (`|’) operator
to combine options):
LOG_CONS: write directly to system console if there is an error while sending to system logger
LOG_NDELAY: open the connection immediately (normally, the con- nection is opened when the first
message is logged)
LOG_PERROR: print to stderr as well
LOG__PID: include PID with each message
By default no options are used.
Copy and move constructors (and assignment operators) are not available.
Copyright
This is free software, distributed under the terms of the GNU General Public License (GPL).
Description
FBB::SyslogStream objects may be used as a std::ostream to write syslog messages using stream facilities.
Multiple separate insertions can be used to create a single syslog message: the message is only sent to
the syslog daemon after receiving a flush command (e.g., after inserting std::flush or std::endl).
Non-printable characters (like ’\n’) show up in the syslog message as octal values, preceded by # (e.g.,
#012 for ’\n’). The newline normally inserted by std::endl is ignored: SyslogStream objects interpret
std::endl like std::flush.
One series of insertions may contain multiple std::endl or std::flush manipulators. At each of these
manipulators a new message is sent to the syslog daemon, containing all info that has so far been
buffered. After sending a message to the syslog daemon, the SyslogStream’s internal buffer is cleared.
Enumerations
The following enumerations are defined in the namespace FBB:
Priority:
The values of this enumeration match the corresponding priority LOG_xxx values used with syslog(3):
o EMERG:
system is unusable;
o ALERT:
action must be taken immediately;
o CRIT:
critical conditions;
o ERR:
error conditions;
o WARNING:
warning conditions;
o NOTICE:
normal, but significant, condition;
o INFO:
informational message;
o DEBUG:
debug-level message; The setMask member (see below) can be used to select which type of messages
will actually be processed by the syslog daemon.
PriorityType:
This enumeration has two values fine-tuning the type of messages that are actually processed by the
syslog daemon:
o SINGLE:
Only messages of the priority specified at the setMask call are processed by the syslog daemon;
o UPTO:
Messages of priority EMERG up to the the priority specified at the setMask call are processed by
the syslog daemon; By default, the syslog daemon processes all messages it receives.
Facility:
The values of this enumeration match the corresponding facility LOG_xxx values used with syslog(3):
o AUTHPRIV:
security/authorization messages (private)
o CRON:
clock daemon (cron and at)
o DAEMON:
other system daemons
o KERN:
kernel messages
o LOCAL0:
reserved for local use. LOCAL1 through LOCAL7 are available as well.
o LPR:
line printer subsystem
o MAIL:
mail subsystem
o NEWS:
USENET news subsystem
o SYSLOGBUF:
messages generated internally by syslogbufd
o USER:
generic user-level messages
o UUCP:
UUCP subsystem
Example
#include <bobcat/syslogstream>
using namespace std;
using namespace FBB;
int main(int argc, char **argv)
{
SyslogStream sls(argv[0]);
sls << SyslogStream::debug << "Hello world" << flush <<
SyslogStream::strerrno << endl;
}
Files
bobcat/syslogstream - defines the class interface
Inherits From
std::ostream
Manipulators
The following set of manipulators are all defined as (static) members. They may be inserted into an
FBB::SyslogStream object. Except for the last manipulator (strerrno), they have the following
characteristics in common:
o They change the priority of the messages that are subsequently inserted by the FBB::SyslogStream
object, thus acting like a separate setPriority call.
o When inserting multiple manipulators before the inserted message is flushed (e.g., using the
std::flush or the std::endl manipulators) the last inserted FBB::SyslogStream manipulator will be
used.
o If the manipulators are not inserted into an FBB::SyslogStream object (but in another std::ostream
type of object) then they perform no action.
Here are the available manipulators:
o SyslogStream::alert:
Messages are inserted with priority FBB::ALERT.
o SyslogStream::crit:
Message are inserted with priority FBB::CRIT.
o SyslogStream::debug:
Messages are inserted with priority FBB::DEBUG.
o SyslogStream::emerg:
Messages are inserted with priority FBB::EMERG.
o SyslogStream::err:
Messages are inserted with priority FBB::ERR.
o SyslogStream::info:
Messages are inserted with priority FBB::INFO.
o SyslogStream::notice:
Messages are inserted with priority FBB::NOTICE.
o SyslogStream::strerrno:
This manipulator inserts the textual interpretation of std::errno’s current value into a
std::ostream. Note that, different from the other manipulators, the object into which this
manipulator is inserted does not have to be a FBB::SyslogStream object.
o SyslogStream::warning:
Messages are inserted with priority FBB::WARNING.
Member Functions
All members of std::ostream are available, as FBB::SyslogStream inherits from this class.
o voidclose():
If the SyslogStream’s internal buffer is not empty it is flushed to the syslog daemon. Thereafer
closelog(3) is called.
o PrioritydefaultPriority()const:
Returns the current default priority. I.e., the priority that will be used for the messages after
inserting endl or flush.
o voidopen(stringconst&ident,FBB::Prioritypriority=FBB::NOTICE,FBB::Facilityfacility=FBB::USER,intoption=0):
Redefines the current identifier, priority, facility and options that are used when sending
messages to the syslog daemon. If the SyslogStream’s internal buffer is not empty it is first
flushed to the syslog daemon using the identifier, priority and options that were active just
before calling open.
o Prioritypriority()const:
Returns the next priority. I.e., the priority that will be used for the next message that is sent
to the syslog daemon.
o PrioritysetDefaultPriority(Prioritypriority):
Changes the default priority of the next message that is sent to the syslog daemon after inserting
std::eoln or std::flush. The previously active default priority is returned.
o PrioritysetPriority(Prioritypriority):
Changes the priority for the next message that is sent to the syslog daemon after inserting
std::eoln or std::flush. Subsequent messages will again use the default priority. The previously
active priority setting is returned.
Name
FBB::SyslogStream - An output stream inserting syslog messages
Namespace
FBB
All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the
namespace FBB.
See Also
bobcat(7), closelog(3), log(3bobcat), openlog(3), rsyslogd(8), syslog(3), syslogbuf(3bobcat)
Static Member Functions
o PrioritysetMask(Prioritypriority,PriorityMaskupTo):
Syslog messages of (if upTo equals SINGLE) or up to (if upTo equals UPTO) the indicated priority
are processed by the syslog daemon.
o PrioritysetMask(Prioritypriority,Priority...priorities):
Syslog messages of the priorities passed to setMask are processed by the syslog daemon. At least
one priority must be specified.
o FacilitystoF(std::stringconst&name,Facilityfacility=USER):
Returns the facility matching the name of the facility provided by name. Facility matching is
performed case insensitively. E.g., if name contains daemon, facility FBB::DAEMON is returned. If
name does not match any facility name then the value of this function’s second argument is
returned. The function’s name (stoF) was used in analogy of the various sto... conversion
functions that were made available by the C++11 standard.
o PrioritystoP(std::stringconst&name,Prioritypriority=NOTICE):
Returns the priority matching the name of the priority provided by name. Priority matching is
performed case insensitively. E.g., if name contains emerg, priority FBB::EMERG is returned. If
name does not match any priority name then the value of this function’s second argument is
returned. The function’s name (stoP) was used in analogy of the various sto... conversion
functions that were made available by the C++11 standard.
Synopsis
#include<bobcat/syslogstream>
Linking option: -lbobcat