Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 76d92db1 in mainline


Ignore:
Timestamp:
2012-08-14T09:37:42Z (9 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master
Children:
cddcc4a3
Parents:
14de4106
Message:

Log to file as well

Location:
uspace/srv/logger
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/logger/logger.h

    r14de4106 r76d92db1  
    4242#include <fibril_synch.h>
    4343
    44 #define DEFAULT_LOGGING_LEVEL LVL_WARN
     44#define DEFAULT_LOGGING_LEVEL LVL_NOTE
    4545
    4646#define NAME "logger"
     
    6767
    6868void namespace_wait_for_reader_change(logging_namespace_t *, bool *);
    69 bool namespace_has_reader(logging_namespace_t *);
     69bool namespace_has_reader(logging_namespace_t *, log_level_t);
    7070void namespace_add_message(logging_namespace_t *, const char *, log_level_t);
    7171log_message_t *namespace_get_next_message(logging_namespace_t *);
  • uspace/srv/logger/main.c

    r14de4106 r76d92db1  
    7474static int handle_receive_message(logging_namespace_t *namespace, int level)
    7575{
    76         bool skip_message = (level > DEFAULT_LOGGING_LEVEL) && !namespace_has_reader(namespace);
     76        bool skip_message = (level > DEFAULT_LOGGING_LEVEL) && !namespace_has_reader(namespace, level);
    7777        if (skip_message) {
    7878                /* Abort the actual message buffer transfer. */
  • uspace/srv/logger/namespace.c

    r14de4106 r76d92db1  
    4040 */
    4141
     42
    4243struct logging_namespace {
    4344        fibril_mutex_t guard;
     
    4546        fibril_condvar_t reader_appeared_cv;
    4647        bool has_reader;
     48        FILE *logfile;
     49        log_level_t logfile_level;
    4750        const char *name;
    4851        link_t link;
     
    107110                return NULL;
    108111        }
     112
     113        char *logfilename;
     114        int rc = asprintf(&logfilename, "/log/%s", name);
     115        if (rc < 0) {
     116                free(namespace->name);
     117                free(namespace);
     118                return NULL;
     119        }
     120        namespace->logfile = fopen(logfilename, "a");
     121        free(logfilename);
     122        if (namespace->logfile == NULL) {
     123                free(namespace->name);
     124                free(namespace);
     125                return NULL;
     126        }
     127
     128        namespace->logfile_level = DEFAULT_LOGGING_LEVEL;
    109129
    110130        fibril_mutex_initialize(&namespace->guard);
     
    153173
    154174        // TODO - destroy pending messages
     175        fclose(namespace->logfile);
    155176        free(namespace->name);
    156177        free(namespace);
     
    223244}
    224245
    225 bool namespace_has_reader(logging_namespace_t *namespace)
    226 {
    227         fibril_mutex_lock(&namespace->guard);
    228         bool has_reader = namespace->has_reader;
     246bool namespace_has_reader(logging_namespace_t *namespace, log_level_t level)
     247{
     248        fibril_mutex_lock(&namespace->guard);
     249        bool has_reader = namespace->has_reader
     250            || level <= namespace->logfile_level;
    229251        fibril_mutex_unlock(&namespace->guard);
    230252        return has_reader;
     
    247269        if (level <= DEFAULT_LOGGING_LEVEL) {
    248270                printf("[%s %d]: %s\n", namespace->name, level, message);
     271        }
     272        if (level <= namespace->logfile_level) {
     273                fprintf(namespace->logfile, "[%d]: %s\n", level, message);
     274                fflush(namespace->logfile);
    249275        }
    250276
Note: See TracChangeset for help on using the changeset viewer.