slog2fa()

Log a printf-style string in a slog2 buffer

Synopsis:

#include <sys/slog2.h>

int slog2fa( slog2_buffer_t buffer,
             uint16_t code,
             uint8_t severity,
             const char* format, ... );

Arguments:

buffer
The handle of the buffer you want to log the message in, or NULL to use the default buffer that you specified earlier with slog2_set_default_buffer().
code
A user-specified code that you want to be associated with the message. The slog2 system doesn't interpret this code in any way.
severity
The severity level of this log item; one of:
  • SLOG2_SHUTDOWN
  • SLOG2_CRITICAL
  • SLOG2_ERROR
  • SLOG2_WARNING
  • SLOG2_NOTICE
  • SLOG2_INFO
  • SLOG2_DEBUG1
  • SLOG2_DEBUG2

For more information, see the entry for slog2_register().

format
A printf-formatted character string used to define the log message.
Additional arguments
An argument vector that specifies the arguments for the format string. You must use the appropriate SLOG2_FA_*() helper macro for parameters, as described below. The last parameter in the vector must be SLOG2_FA_END.

Library:

libslog2

Use the -l slog2 option to qcc to link against this library.

Description:

The slog2fa() function a printf-style format string along with its arguments specified in the argument vector. This function uses special formatting macros to ensure that va_args() doesn't trigger any interrupts. The format string isn't decoded before writing; it must be decoded during the time of the read.

Note: If you're specifying a string with %s, the size must include the NULL character.

You can use the following macros to build the parameters to slog2fa:

For example:

int8_t some_number = -1;

slog2fa( ..., "string:%s, some_number:%d", SLOG2_FA_STRING( "Hello world" ),
                                           SLOG2_FA_SIGNED( some_number ),
                                           SLOG2_FA_END );

Returns:

0 on success, or -1 if an error occurred.

Errors:

EBUSY
The logger couldn't obtain a buffer within the number of retries that you specified when you registered the buffer set; see slog2_register().
EFAULT
You specified NULL for buffer, but there's no default buffer.
EINVAL
The format string is invalid.
ENOMEM
The resulting packet size would be greater than the maximum packet size allowed.
EPERM
The process hasn't registered with slog2.

Examples:

See slog2_register().

Classification:

QNX Neutrino

Safety:  
Cancellation point No
Interrupt handler Read the Caveats
Signal handler Yes
Thread Yes

Caveats:

Don't use double or float arguments in an interrupt handler, unless your code is compiled to use software floating-point emulation.