Changeset f039dba in mainline for uspace/lib/c


Ignore:
Timestamp:
2012-08-17T09:57:27Z (13 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b1912b0c
Parents:
f72ae3b
Message:

Logger also works with hierarchy

Location:
uspace/lib/c
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/io/log.c

    rf72ae3b rf039dba  
    4343#include <ns.h>
    4444
    45 typedef struct {
    46         char *name;
    47         sysarg_t top_log_id;
    48         sysarg_t log_id;
    49 } log_info_t;
    50 
    51 static log_info_t default_log = {
    52         .name = NULL,
    53         .top_log_id = 0,
    54         .log_id = 0
    55 };
    56 
    57 static sysarg_t default_top_log_id;
     45static sysarg_t default_log_id;
    5846
    5947/** Log messages are printed under this name. */
     
    8573
    8674        ipc_call_t answer;
    87         aid_t reg_msg = async_send_0(exchange, LOGGER_WRITER_CREATE_TOPLEVEL_LOG, &answer);
     75        aid_t reg_msg = async_send_1(exchange, LOGGER_WRITER_CREATE_LOG, LOG_NO_PARENT, &answer);
    8876        int rc = async_data_write_start(exchange, prog_name, str_size(prog_name));
    8977        sysarg_t reg_msg_rc;
     
    9987                return reg_msg_rc;
    10088
    101         default_top_log_id = IPC_GET_ARG1(answer);
    102         default_log.top_log_id = default_top_log_id;
     89        default_log_id = IPC_GET_ARG1(answer);
    10390
    10491        return EOK;
    10592}
    10693
    107 static int logger_message(async_sess_t *session, log_t ctx, log_level_t level, const char *message)
     94static int logger_message(async_sess_t *session, log_t log, log_level_t level, const char *message)
    10895{
    10996        async_exch_t *exchange = async_exchange_begin(session);
     
    11198                return ENOMEM;
    11299        }
    113         log_info_t *log_info = ctx != 0 ? (log_info_t *) ctx : &default_log;
    114 
    115         aid_t reg_msg = async_send_3(exchange, LOGGER_WRITER_MESSAGE,
    116             log_info->top_log_id, log_info->log_id, level, NULL);
     100        if (log == LOG_DEFAULT)
     101                log = default_log_id;
     102
     103        aid_t reg_msg = async_send_2(exchange, LOGGER_WRITER_MESSAGE,
     104            log, level, NULL);
    117105        int rc = async_data_write_start(exchange, message, str_size(message));
    118106        sysarg_t reg_msg_rc;
     
    206194log_t log_create(const char *name, log_t parent)
    207195{
    208         log_info_t *info = malloc(sizeof(log_info_t));
    209         if (info == NULL)
    210                 return LOG_DEFAULT;
    211         info->name = NULL;
    212 
    213         if (parent == LOG_DEFAULT) {
    214                 info->name = str_dup(name);
    215                 if (info->name == NULL)
    216                         goto error;
    217                 info->top_log_id = default_top_log_id;
    218         } else {
    219                 log_info_t *parent_info = (log_info_t *) parent;
    220                 int rc = asprintf(&info->name, "%s/%s",
    221                     parent_info->name, name);
    222                 if (rc < 0)
    223                         goto error;
    224                 info->top_log_id = parent_info->top_log_id;
    225         }
    226 
    227196        async_exch_t *exchange = async_exchange_begin(logger_session);
    228197        if (exchange == NULL)
    229                 goto error;
     198                return parent;
     199
     200        if (parent == LOG_DEFAULT)
     201                parent = default_log_id;
    230202
    231203        ipc_call_t answer;
    232         aid_t reg_msg = async_send_1(exchange, LOGGER_WRITER_CREATE_SUB_LOG,
    233             info->top_log_id, &answer);
    234         int rc = async_data_write_start(exchange, info->name, str_size(info->name));
     204        aid_t reg_msg = async_send_1(exchange, LOGGER_WRITER_CREATE_LOG,
     205            parent, &answer);
     206        int rc = async_data_write_start(exchange, name, str_size(name));
    235207        sysarg_t reg_msg_rc;
    236208        async_wait_for(reg_msg, &reg_msg_rc);
     
    239211
    240212        if ((rc != EOK) || (reg_msg_rc != EOK))
    241                 goto error;
    242 
    243         info->log_id = IPC_GET_ARG1(answer);
    244         return (sysarg_t) info;
    245 
    246 error:
    247         free(info->name);
    248         free(info);
    249         return parent;
     213                return parent;
     214
     215        return IPC_GET_ARG1(answer);
    250216}
    251217
  • uspace/lib/c/generic/io/logctl.c

    rf72ae3b rf039dba  
    8181}
    8282
    83 int logctl_set_top_log_level(const char *namespace, log_level_t new_level)
    84 {
    85         async_exch_t *exchange = NULL;
    86         int rc = start_logger_exchange(&exchange);
    87         if (rc != EOK)
    88                 return rc;
    89 
    90         aid_t reg_msg = async_send_1(exchange, LOGGER_CTL_SET_TOP_LOG_LEVEL,
    91             new_level, NULL);
    92         rc = async_data_write_start(exchange, namespace, str_size(namespace));
    93         sysarg_t reg_msg_rc;
    94         async_wait_for(reg_msg, &reg_msg_rc);
    95 
    96         async_exchange_end(exchange);
    97 
    98         if (rc != EOK) {
    99                 return rc;
    100         }
    101 
    102         return (int) reg_msg_rc;
    103 }
    104 
    105 int logctl_set_log_level(const char *namespace, const char *context, log_level_t new_level)
     83int logctl_set_log_level(const char *logname, log_level_t new_level)
    10684{
    10785        async_exch_t *exchange = NULL;
     
    11290        aid_t reg_msg = async_send_1(exchange, LOGGER_CTL_SET_LOG_LEVEL,
    11391            new_level, NULL);
    114         rc = async_data_write_start(exchange, namespace, str_size(namespace));
    115         int rc2 = async_data_write_start(exchange, context, str_size(context));
     92        rc = async_data_write_start(exchange, logname, str_size(logname));
    11693        sysarg_t reg_msg_rc;
    11794        async_wait_for(reg_msg, &reg_msg_rc);
     
    12299                return rc;
    123100
    124         if (rc2 != EOK)
    125                 return rc2;
    126 
    127101        return (int) reg_msg_rc;
    128102}
  • uspace/lib/c/include/io/log.h

    rf72ae3b rf039dba  
    5353typedef sysarg_t log_t;
    5454#define PRIlogctx PRIxn
    55 #define LOG_DEFAULT 0
     55#define LOG_DEFAULT ((log_t) -1)
     56#define LOG_NO_PARENT ((log_t) 0)
    5657
    5758extern const char *log_level_str(log_level_t);
  • uspace/lib/c/include/io/logctl.h

    rf72ae3b rf039dba  
    3737
    3838extern int logctl_set_default_level(log_level_t);
    39 extern int logctl_set_top_log_level(const char *, log_level_t);
    40 extern int logctl_set_log_level(const char *, const char *, log_level_t);
     39extern int logctl_set_log_level(const char *, log_level_t);
    4140
    4241#endif
  • uspace/lib/c/include/ipc/logger.h

    rf72ae3b rf039dba  
    3838typedef enum {
    3939        LOGGER_CTL_SET_DEFAULT_LEVEL = IPC_FIRST_USER_METHOD,
    40         LOGGER_CTL_SET_TOP_LOG_LEVEL,
    4140        LOGGER_CTL_SET_LOG_LEVEL
    4241} logger_control_request_t;
     
    4443typedef enum {
    4544        /** Followed by STRING, returns ID to be used for CREATE_SUB_LOG */
    46         LOGGER_WRITER_CREATE_TOPLEVEL_LOG = IPC_FIRST_USER_METHOD,
    47         LOGGER_WRITER_CREATE_SUB_LOG,
     45        LOGGER_WRITER_CREATE_LOG = IPC_FIRST_USER_METHOD,
    4846        LOGGER_WRITER_MESSAGE
    4947} logger_writer_request_t;
Note: See TracChangeset for help on using the changeset viewer.