Minimal C diagnostic output/logging library.
  • C 91.9%
  • CMake 8.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-06-10 23:16:47 +01:00
.github/workflows Create cmake.yml 2021-07-11 00:28:12 +01:00
doc update pic for docs, bump version 2021-07-10 17:35:56 +01:00
simdb fix installation path for simdb.pc file 2021-07-31 12:37:37 +01:00
.gitignore initiali commit 2020-05-16 11:35:18 +01:00
CMakeLists.txt prevent modern cmake error 2026-06-10 23:16:47 +01:00
demo.c add UTC, nocolor, T format options. 2021-07-10 17:23:32 +01:00
LICENSE make licensing type more obvious 2021-07-10 15:59:11 +01:00
README.rst tidy up docs after project repo rename 2021-07-31 12:44:57 +01:00

Simple Level-Debug Library for C and C++
========================================

.. image:: https://raw.githubusercontent.com/mousefad/c-simdb/master/doc/demo.png


Features
--------

* Prefix each log message with timestamp, program name, PID and message level
* Colorized output
* Printf-style formatting
* Nine levels (fatal, error warn, info, debugs 1 .. 5)
* Set debugging output level at runtime
* pkg-config script for easy use


Debug Levels
------------

The initial debugging level is specified when ``db_init()`` is called, and can be
modified later by calling ``db_set_level()``. The debugging level determines which
messages in your program will produce output - if the message level is less than 
or equal to the verbosity of the current debugging level, the message will produce 
output, otherwise it will not.

The following level are available from least to most verbose:

+------------+-------------+---------------+-------------------------------+
| Level      | Message     | Color (bg/fg) | Notes                         |
+============+=============+===============+===============================+
| ``db_f``   | ``FATAL``   | red/white     | calls ``exit(EXIT_FAILURE);`` |
+------------+-------------+---------------+-------------------------------+
| ``db_e``   | ``ERROR``   | -/red         |                               |
+------------+-------------+---------------+-------------------------------+
| ``db_w``   | ``WARN``    | -/yellow      |                               |
+------------+-------------+---------------+-------------------------------+
| ``db_i``   | ``INFO``    | -/green       |                               |
+------------+-------------+---------------+-------------------------------+
| ``db_1``   | ``DEBUG-1`` | -/cyan        |                               |
+------------+-------------+---------------+-------------------------------+
| ``db_2``   | ``DEBUG-2`` | -/cyan        |                               |
+------------+-------------+---------------+-------------------------------+
| ``db_3``   | ``DEBUG-3`` | -/cyan        |                               |
+------------+-------------+---------------+-------------------------------+
| ``db_4``   | ``DEBUG-4`` | -/cyan        |                               |
+------------+-------------+---------------+-------------------------------+
| ``db_5``   | ``DEBUG-5`` | -/cyan        |                               |
+------------+-------------+---------------+-------------------------------+


Building the library
--------------------

Make sure dependencies are satisfied:

* Some C compiler
* CMake >= 3.0

Extract / clone the source and note the path, e.g. ``~/src/simdb``, create a build directory somewhere and then::

  $ mkdir ~/simdb_build && cd ~/simdb_build
  $ cmake ~/src/simdb
  $ make
  $ make install
       
By default, installation will be in ``/usr/local``. To choose a different destination, use the ``-D`` option to ``cmake`` to define ``CMAKE_INSTALL_PREFIX``. For example::

  $ cmake -DCMAKE_INSTALL_PREFIX=/opt/mouse ~/src/simdb


Use
---

A ``pkg-config`` configuration file is provided, and will be installed to ``$CMAKE_INSTALL_PREFIX/share/pkgconfig/simdb.pc``. Use this with the ``pkg-config`` program to determine the correct compiler and linker options to use when building your own projects with this library. Typically this would be done from your project ``Makefile`` or similar::

  $ pkg-config --cflags simdb
  $ pkg-config --libs simdb

Note: If ``simdb`` is installed in a non-stanard location, it may be necessary to add the path to the ``simdb.pc`` file in the ``PKG_CONFIG_PATH`` environment variable.

``db_init`` should be called before any other calls to library functions. This is typically done from ``main()``.  ``argv[0]`` may be passed as the program name - the basename will be extracted and copied to th global ``db_prog_name``.  Subsequent calls to the ``db()`` function are used to generare debugging output (or not, based on the debugging level), as follows:

.. code-block:: C

  #include <stdio.h>
  #include <simdb.h>

  int main(int argc, char** argv) {
      db_init(stderr, argv[0], db_i, 0);
      db(db_i, "This message will be printed because the debugging level is set to db_i\n");
      db(db_1, "Not printed because db_1 is below the current level, db_i\n.");
  }

See ``demo.c`` for a more complete example.