sc/logger
2021-01-24 18:16:48 +03:00
..
2021-01-14 02:55:27 +03:00
2020-12-27 16:14:34 +03:00
2021-01-24 18:16:48 +03:00
2020-12-27 16:14:34 +03:00
2021-01-24 18:16:48 +03:00
2021-01-24 17:56:18 +03:00

Logger

Overview

  • Log destination can be stdout, file and user callback.
  • Possible to get logs to all destinations at the same time.
  • Log files are rotated.
  • Thread-safe.
  • Just copy sc_log.h and sc_log.c to your project.

Usage

#include "sc_log.h"

int log_callback(void *arg, enum sc_log_level level,
                               const char *fmt, va_list va)
{
    const char *my_app = arg;
    const char *level_str = sc_log_levels[level].str;

    fprintf(stdout, " %s received log : level = [%s] ", my_app, level_str);
    vfprintf(stdout, fmt, va);

    return 0;
}

int main(int argc, char *argv[])
{
    const char* my_app_name = "my app";

    //sc_log_init(); is not thread-safe, it must be called by a single thread.
    sc_log_init();
    sc_log_set_thread_name("my-app-thread"); 

    //Default log-level is 'info' and default destination is 'stdout'
    sc_log_info("Hello world!");

    //Enable logging to file.
    sc_log_set_file("log.0.txt", "log-latest.txt");

    //stdout and file will get the log line
    sc_log_info("to stdout and file!");

    //Enable callback
    sc_log_set_callback(log_callback, (void*) my_app_name);

    //stdout, file and callback will get the log line
    sc_log_info("to all!");
    sc_log_info("to all!");

    //sc_log_term(); is not thread-safe, it must be called by a single thread.
    sc_log_term();

    return 0;
}