src/log.c
author Tero Marttila <terom@fixme.fi>
Tue, 28 Apr 2009 22:36:36 +0300
branchnew-transport
changeset 157 1e5674d0eec4
parent 156 6534a4ac957b
child 172 ea4972e51fa3
permissions -rw-r--r--
fixed fifo
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include "log.h"
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
     3
#include "str.h"
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include <stdio.h>
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
#include <stdarg.h>
118
05b8d5150313 implement fifo (sock_fifo.c) and test_fifo
Tero Marttila <terom@fixme.fi>
parents: 104
diff changeset
     7
#include <string.h>
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
73
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
     9
/**
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    10
 * The default log output func
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    11
 */
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    12
void log_default_func (const char *line, void *arg)
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    13
{
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    14
    (void) arg;
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    15
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    16
    // display
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    17
    printf("%s\n", line);
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    18
}
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    19
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    20
/**
73
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    21
 * The global log level
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    22
 */
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    23
static enum log_level _log_level = LOG_LEVEL_DEFAULT;
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    24
104
fc196bb4bcc2 implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents: 73
diff changeset
    25
/**
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    26
 * The global log output func
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    27
 */
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    28
static struct log_output_ctx {
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    29
    /** The function itself */
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    30
    log_output_func func;
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    31
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    32
    /** The arg */
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    33
    void *arg;
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    34
} _log_output_ctx = { log_default_func, NULL };
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    35
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    36
/**
104
fc196bb4bcc2 implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents: 73
diff changeset
    37
 * List of log level names
fc196bb4bcc2 implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents: 73
diff changeset
    38
 */
fc196bb4bcc2 implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents: 73
diff changeset
    39
const char *log_level_names[] = {
fc196bb4bcc2 implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents: 73
diff changeset
    40
    "DEBUG",
fc196bb4bcc2 implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents: 73
diff changeset
    41
    "INFO",
fc196bb4bcc2 implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents: 73
diff changeset
    42
    "WARN",
fc196bb4bcc2 implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents: 73
diff changeset
    43
    "ERROR",
fc196bb4bcc2 implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents: 73
diff changeset
    44
    "FATAL",
fc196bb4bcc2 implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents: 73
diff changeset
    45
    NULL
fc196bb4bcc2 implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents: 73
diff changeset
    46
};
fc196bb4bcc2 implement lua_log and lua_log_level
Tero Marttila <terom@fixme.fi>
parents: 73
diff changeset
    47
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
#define _LOG_LEVEL_NAME(ll) case LOG_ ## ll: return #ll;
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
const char *log_level_name (enum log_level level)
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
{
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    switch (level) {
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
        _LOG_LEVEL_NAME(DEBUG)
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
        _LOG_LEVEL_NAME(INFO)
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
        _LOG_LEVEL_NAME(WARN)
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
        _LOG_LEVEL_NAME(ERROR)
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
        _LOG_LEVEL_NAME(FATAL)
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
        default: return "???";
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
    }
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
}
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    60
#undef _LOG_LEVEL_NAME
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
73
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    62
void set_log_level (enum log_level level)
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    63
{
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    64
    // meep meep
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    65
    _log_level = level;
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    66
}
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    67
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    68
void log_set_func (log_output_func func, void *arg)
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
{
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    70
    // replace the current one
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    71
    _log_output_ctx.func = func ? func : log_default_func;
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    72
    _log_output_ctx.arg = arg;
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    73
}
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    74
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    75
/**
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    76
 * Format the full output line, and pass it to the log_output_func. The line will be of the form:
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    77
 *  "[<level>] <func> : <log_fmt> [ <user_fmt> ]"
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    78
 */
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    79
static void log_output (enum log_level level, const char *func, const char *user_fmt, va_list user_fmtargs, const char *log_fmt, ...)
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    80
{
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    81
    char buf[LOG_MSG_MAX], *buf_ptr = buf;
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    82
    size_t buf_size = sizeof(buf);
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
73
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    84
    // filter out?
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    85
    if (level < _log_level)
2780a73c71f3 add set_log_level function, and add --debug/--quiet options to test
Tero Marttila <terom@fixme.fi>
parents: 22
diff changeset
    86
        return;
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    87
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    88
    // output the header
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    89
    buf_ptr += str_advance(NULL, &buf_size, str_append_fmt(buf_ptr, buf_size, "[%5s] %20s : ", log_level_name(level), func));
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
    
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    91
    // output the user data
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    92
    buf_ptr += str_advance(NULL, &buf_size, str_append_fmt_va(buf_ptr, buf_size, user_fmt, user_fmtargs));
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    93
    
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    94
    // output the suffix
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    95
    if (log_fmt) {
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    96
        va_list vargs;
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    97
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    98
        va_start(vargs, log_fmt);
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    99
        buf_ptr += str_advance(NULL, &buf_size, str_append_fmt_va(buf_ptr, buf_size, log_fmt, vargs));
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   100
        va_end(vargs);
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   101
    }
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   102
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   103
    // send it to the output func
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   104
    _log_output_ctx.func(buf, _log_output_ctx.arg);
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   105
}
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   106
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   107
void log_msg (enum log_level level, const char *func, const char *format, ...)
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   108
{
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   109
    va_list vargs;
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   110
    
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   111
    // formatted output: no suffix
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
    va_start(vargs, format);
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   113
    log_output(level, func, format, vargs, NULL);
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
    va_end(vargs);
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   115
}
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
139
55b9dcc2b73a implement sock_ssl_connect_async (the old sock_ssl_connect exists no more)
Tero Marttila <terom@fixme.fi>
parents: 137
diff changeset
   117
void _log_err_code (enum log_level level, err_t err, const char *func, const char *format, ...)
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   118
{
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   119
    va_list vargs;
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   120
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   121
    // formatted output: suffix error_name()
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   122
    va_start(vargs, format);
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   123
    log_output(level, func, format, vargs, ": %s", error_name(err));
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   124
    va_end(vargs);
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
}
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
156
6534a4ac957b add transport/sock/line_proto/etc code compiles
Tero Marttila <terom@fixme.fi>
parents: 139
diff changeset
   127
void _log_err (enum log_level level, const error_t *err, const char *func, const char *format, ...)
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
{
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
    va_list vargs;
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   131
    // formatted output: suffix error_msg()
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
    va_start(vargs, format);
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   133
    log_output(level, func, format, vargs, ": %s", error_msg(err));
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
    va_end(vargs);
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
}
118
05b8d5150313 implement fifo (sock_fifo.c) and test_fifo
Tero Marttila <terom@fixme.fi>
parents: 104
diff changeset
   136
05b8d5150313 implement fifo (sock_fifo.c) and test_fifo
Tero Marttila <terom@fixme.fi>
parents: 104
diff changeset
   137
void _log_perr (enum log_level level, const char *func, const char *format, ...)
05b8d5150313 implement fifo (sock_fifo.c) and test_fifo
Tero Marttila <terom@fixme.fi>
parents: 104
diff changeset
   138
{
05b8d5150313 implement fifo (sock_fifo.c) and test_fifo
Tero Marttila <terom@fixme.fi>
parents: 104
diff changeset
   139
    va_list vargs;
05b8d5150313 implement fifo (sock_fifo.c) and test_fifo
Tero Marttila <terom@fixme.fi>
parents: 104
diff changeset
   140
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   141
    // formatted output: suffix strerror()
118
05b8d5150313 implement fifo (sock_fifo.c) and test_fifo
Tero Marttila <terom@fixme.fi>
parents: 104
diff changeset
   142
    va_start(vargs, format);
137
c607c357c486 implement console_print and log_set_func
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   143
    log_output(level, func, format, vargs, ": %s", strerror(errno));
118
05b8d5150313 implement fifo (sock_fifo.c) and test_fifo
Tero Marttila <terom@fixme.fi>
parents: 104
diff changeset
   144
    va_end(vargs);
05b8d5150313 implement fifo (sock_fifo.c) and test_fifo
Tero Marttila <terom@fixme.fi>
parents: 104
diff changeset
   145
}
05b8d5150313 implement fifo (sock_fifo.c) and test_fifo
Tero Marttila <terom@fixme.fi>
parents: 104
diff changeset
   146