Saitek X52/X52pro userspace driver for Unix/Linux
 
 
 
 
 
Go to file
nirenjan dc72e43f1e Squashed 'lib/pinelog/' changes from bdee493..27a5eab
27a5eab Use localtime_r instead of localtime

git-subtree-dir: lib/pinelog
git-subtree-split: 27a5eab8b75c18d13ec0b69c01deaa82c996cf57
2021-08-03 11:26:06 -07:00
m4 Squashed 'lib/pinelog/' content from commit b5457f4 2021-07-14 15:54:58 -07:00
.gitignore Squashed 'lib/pinelog/' changes from b5457f4..321d9aa 2021-07-19 09:50:42 -07:00
LICENSE Squashed 'lib/pinelog/' content from commit b5457f4 2021-07-14 15:54:58 -07:00
Makefile.am Squashed 'lib/pinelog/' changes from b5457f4..321d9aa 2021-07-19 09:50:42 -07:00
README.md Squashed 'lib/pinelog/' changes from 321d9aa..bdee493 2021-07-27 17:02:49 -07:00
autogen.sh Squashed 'lib/pinelog/' content from commit b5457f4 2021-07-14 15:54:58 -07:00
bench_pinelog.c Squashed 'lib/pinelog/' changes from 321d9aa..bdee493 2021-07-27 17:02:49 -07:00
configure.ac Squashed 'lib/pinelog/' changes from b5457f4..321d9aa 2021-07-19 09:50:42 -07:00
pinelog.c Squashed 'lib/pinelog/' changes from bdee493..27a5eab 2021-08-03 11:26:06 -07:00
pinelog.h Squashed 'lib/pinelog/' changes from 321d9aa..bdee493 2021-07-27 17:02:49 -07:00
test_pinelog.c Squashed 'lib/pinelog/' changes from b5457f4..321d9aa 2021-07-19 09:50:42 -07:00

README.md

Pinelog - a lightweight logging API

Pinelog is a lightweight logging API for C programs that's designed to be included in your program source code. Parameters for Pinelog are configured at build time by means of preprocessor flags.

Usage

Logging macros

Pinelog uses printf style formatting, using the following list of macros. The macro indicates the level at which the message is logged.

  • PINELOG_FATAL
  • PINELOG_ERROR
  • PINELOG_WARN
  • PINELOG_INFO
  • PINELOG_DEBUG
  • PINELOG_TRACE

Note: PINELOG_FATAL is used when the program encounters a fatal condition and needs to abort. This will log the fatal message and terminate the program with an exit code of 1.

Example

PINELOG_INFO("configuration file %s not found, using defaults", config_file);

Logging levels

The default logging level is ERROR, and this can be controlled by the preprocessor flag PINELOG_DEFAULT_LEVEL.

The program can control the level at which messages can be logged at runtime, by using the pinelog_set_level function. This function takes in the level definition, which is one of the following, in increasing order of priority.

  • PINELOG_LVL_TRACE
  • PINELOG_LVL_DEBUG
  • PINELOG_LVL_INFO
  • PINELOG_LVL_WARNING
  • PINELOG_LVL_ERROR
  • PINELOG_LVL_FATAL
  • PINELOG_LVL_NONE

Setting the level to a given priority suppresses all log messages of lower priority, i.e., if the level is set to PINELOG_LVL_ERROR, messages at WARNING level and below will be suppressed, but ERROR and FATAL messages will be logged.

Note: PINELOG_LVL_NONE suppresses all log messages, but PINELOG_FATAL will still terminate the program, even though nothing is logged.

Example

pinelog_set_level(PINELOG_LVL_WARNING);
-DPINELOG_DEFAULT_LEVEL=PINELOG_LVL_WARNING

Output redirection

Pinelog defaults to writing the log messages to standard output, and this can be controlled by the preprocessor flag PINELOG_DEFAULT_STREAM.

However, the application can redirect log messages at runtime to a different FILE * stream, or to a file by using one of the following two methods:

FILE *out = fopen("/run/app.fifo", "w");
pinelog_set_output_stream(out);
pinelog_set_output_file("/var/log/app.log");
-DPINELOG_DEFAULT_STREAM=stderr

Logging format

Pinelog uses an opinionated logging format that is fixed as follows. Fields within [] are optional and controlled by build time flags.

[2021-07-14 11:08:04 ][ERROR: ][./test_pinelog.c:108 ]formatted message.

The program can be controlled by the following preprocessor flags, all of which default to 0 (disabled). Set the flag to 1 to enable it.

  • PINELOG_SHOW_DATE - Display the ISO 8601 date and time when the message is logged.
  • PINELOG_SHOW_LEVEL - Display the level at which the message is logged.
  • PINELOG_SHOW_BACKTRACE - Display the file and line where the message is logged.

Set these flags by using the -D compiler argument, .e.g. -DPINELOG_SHOW_LEVEL=1 -DPINELOG_SHOW_DATE=1

Level strings

The application can control the level strings displayed by means of preprocessor flags, if the application wishes to display the log messages in a language other than English. This can be achieved by means of the following preprocessor definitions.

  • PINELOG_FATAL_STR
  • PINELOG_ERROR_STR
  • PINELOG_WARNING_STR
  • PINELOG_INFO_STR
  • PINELOG_DEBUG_STR
  • PINELOG_TRACE_STR

Example

-DPINELOG_ERROR_STR=\"E\" -DPINELOG_FATAL_STR=\"F\"

Integrating Pinelog

Pinelog is intended to be integrated into your application source tree, either by means of including the sources directly, or by including the repository as a Git submodule or subtree.

The default build of Pinelog uses an autotools generated config.h file, which includes checks for the following GCC attributes. If you don't care about these, then either create a dummy config.h which includes the macros HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR, HAVE_FUNC_ATTRIBUTE_DESTRUCTOR and HAVE_FUNC_ATTRIBUTE_FORMAT, or use the AX_GCC_FUNC_ATTRIBUTE macro to check for the constructor, destructor and format attributes in your application's configure.ac file.