System logging capabilities. More...
Macros | |
#define | LOG_MASK(pri) (1 << (pri)) |
Converts a priority definition for use in setlogmask() | |
Options for openlog() | |
#define | LOG_CONS (2 << 12) /* log to the system console on error */ |
If the message cannot be delivered to the syslog daemon, it will be directly dumped to stderr. | |
#define | LOG_NDELAY (8 << 12) /* connect to the syslog daemon immediately */ |
Connect to the syslog daemon immediately. | |
#define | LOG_NOWAIT (64 << 12) /* do not wait for child processes */ |
Do not wait for child processes. | |
#define | LOG_ODELAY (4 << 12) /* delay open until syslog() is called */ |
Delay open until syslog() is called. | |
#define | LOG_PERROR (32 << 12) /* dump to stderr as well */ |
The message will not only be sent to the syslog daemon, it will also be written to the application's stderr (unconditionally). | |
#define | LOG_PID (1 << 12) /* log the process (thread/team) ID with each message */ |
Log the process (thread/team) ID with each message. | |
#define | LOG_SERIAL (16 << 12) /* dump to serial output as well (not implemented) */ |
Dump to serial output as well. | |
Facilities for openlog() | |
#define | LOG_AUTH (4 << 3) |
Standard POSIX facility(?) for messages by the authentication services. | |
#define | LOG_AUTHPRIV (10 << 3) /* security/authorization messages (private) */ |
Reserved for private (?) messages that relate to authentication. | |
#define | LOG_CRON (9 << 3) |
Reserved for messages generated by the CRON daemon. | |
#define | LOG_DAEMON (3 << 3) |
Standard POSIX (?) facility for messages by daemons (and Haiku servers). | |
#define | LOG_KERN (0 << 3) /* messages generated by the kernel */ |
Reserved for messages generated by the kernel. | |
#define | LOG_LOCAL0 (16 << 3) |
For local use. | |
#define | LOG_LOCAL1 (17 << 3) |
For local use. | |
#define | LOG_LOCAL2 (18 << 3) |
For local use. | |
#define | LOG_LOCAL3 (19 << 3) |
For local use. | |
#define | LOG_LOCAL4 (20 << 3) |
For local use. | |
#define | LOG_LOCAL5 (21 << 3) |
For local use. | |
#define | LOG_LOCAL6 (22 << 3) |
For local use. | |
#define | LOG_LOCAL7 (23 << 3) |
For local use. | |
#define | LOG_LPR (6 << 3) |
Reserved for messages generated by the UNIX lpr printing tool. | |
#define | LOG_MAIL (2 << 3) |
Standard (?) POSIX facility for messages by the mailing daemon. | |
#define | LOG_NEWS (7 << 3) |
Reserved for messages generated by something UNIXy that does something with NEWS. | |
#define | LOG_SYSLOG (5 << 3) /* messages generated internally by syslogd */ |
Reserved for messages generated by the syslog daemon. | |
#define | LOG_USER (1 << 3) /* by user processes */ |
Reserved for messages generated by user processes. | |
#define | LOG_UUCP (8 << 3) |
Reserved for messages generated by UUCP. | |
Priorities for syslog(), log_team() and log_thread() | |
#define | LOG_ALERT 1 /* a condition that should be corrected immediately */ |
A condition to that should be corrected immediately. | |
#define | LOG_CRIT 2 /* critical conditions like hard drive errors */ |
Critical conditions like hard drive errors. | |
#define | LOG_DEBUG 7 |
Debug information. | |
#define | LOG_EMERG 0 /* a panic condition */ |
A panic condition. | |
#define | LOG_ERR 3 |
Errors. | |
#define | LOG_INFO 6 |
Information, like versions and so. | |
#define | LOG_NOTICE 5 |
Notices, instructions on how to use certain configuration options. | |
#define | LOG_PANIC LOG_EMERG |
An alias for LOG_EMERG. | |
#define | LOG_WARNING 4 |
Warnings. | |
Functions | |
void | closelog (void) |
Closes the thread session, and frees all associated data. | |
void | closelog_team (void) |
Closes the current session. | |
void | closelog_thread (void) |
Closes the log. | |
void | log_team (int priority, const char *message,...) |
Sends a message of the specified priority to the syslog daemon. | |
void | log_thread (int priority, const char *message,...) |
sends a message to the system log | |
void | openlog (const char *ident, int options, int facility) |
Starts a log session, and sets some output options. | |
void | openlog_team (const char *ident, int logopt, int facility) |
Starts a log session, and sets some output options. | |
void | openlog_thread (const char *ident, int logopt, int facility) |
Starts a log session, and sets some output options. | |
int | setlogmask (int priorityMask) |
sets the logging priority mask | |
int | setlogmask_team (int priorityMask) |
Sets the logging priority mask. | |
int | setlogmask_thread (int priorityMask) |
sets the logging priority mask | |
void | syslog (int priority, const char *message,...) |
sends a message to the system log | |
System logging capabilities.
The syslog service is provided by a server in the background, the syslog_daemon.
After it has been started during the system's boot process, it will just sit there and wait for messages. Every call to syslog() or log_thread/team() will pass a message to the server containing information about what should be written to the log and with what options. The message is not a BMessage, but a plain data structure that can be created without any knowledge about BMessages. That is needed, because the service is used by the kernel as well.
The server then just passes on that message to its internal handlers. It has two built-in handlers. One of them just processes the message and dumps a formatted text to the syslog file at /var/log/syslog. The other one creates a standard BMessage out of the message and broadcasts it to all of its listeners.
If the syslog file reaches a certain size (by default 512 kB), it will be renamed to syslog.old, and a new syslog file is created.
The first call of a function that will connect to the syslog service will create a syslog session. It's important to know that there is one session for each thread that uses the service, as well as one extra session for all team-wide logging functions.
The original POSIX API as well as part of the additional BeOS API both use thread specific sessions. When a session is started, it will inherit the options defined for the team session. That means you can set logging options that every thread in your application will respect (if you don't overwrite them locally). But in order to define team wide options, you have to specifically use the BeOS-specific team API.
#define LOG_SERIAL (16 << 12) /* dump to serial output as well (not implemented) */ |
Dump to serial output as well.
void closelog | ( | void | ) |
Closes the thread session, and frees all associated data.
The next call to the syslog service will start a new session, and will inherit the team log options at that point again.
void closelog_team | ( | void | ) |
Closes the current session.
This has currently no effect for the team logging functions.
void openlog | ( | const char * | ident, |
int | options, | ||
int | facility | ||
) |
Starts a log session, and sets some output options.
Like openlog_thread() this function defines the log session in thread context; the global options set by openlog_team() are not affected by this function.
void openlog_team | ( | const char * | ident, |
int | logopt, | ||
int | facility | ||
) |
Starts a log session, and sets some output options.
This function defines the team-wide logging options. Thread local sessions started with openlog() or openlog_thread() will inherit the options of the global session.
ident | The identification string that is prepended to every message from your team. |
logopt | Logging option(s). |
facility | Specifies from what facility your message has been sent; for most cases this should just be LOG_USER. |
int setlogmask_team | ( | int | priorityMask | ) |
Sets the logging priority mask.
Use the LOG_MASK() macro to build a mask of priorities to show. All messages of other priorities will be discarded. Example uses: