X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=log.c;h=314a42b1d7d6f8000950763144afacdb955fa612;hb=0547a5d44e24f3b1c832624113787395e9f7467f;hp=81c1f0bc23b5b7b2885865ba8b8dc2cf4fae3c35;hpb=a2f0042c64d7872ec16b6f29627387be73cbb367;p=framework%2Fsystem%2Fdlog.git diff --git a/log.c b/log.c index 81c1f0b..314a42b 100755 --- a/log.c +++ b/log.c @@ -1,11 +1,13 @@ /* - * Copyright (C) 2007 The Android Open Source Project + * DLOG + * Copyright (c) 2005-2008, The Android Open Source Project + * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd. * - * Licensed under the Apache License, Version 2.0 (the "License"); + * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -36,6 +38,7 @@ static int log_fds[(int)LOG_ID_MAX] = { -1, -1, -1, -1 }; static int g_logging_on = 1; +static int g_dlog_level_init = 0; static int g_dlog_level = DLOG_SILENT; static int __dlog_init(log_id_t, log_priority, const char *tag, const char *msg); @@ -45,6 +48,51 @@ static int __write_to_log_null(log_id_t log_id, log_priority prio, const char *t { return -1; } +static int __write_to_log_kernel(log_id_t log_id, log_priority prio, const char *tag, const char *msg) +{ + ssize_t ret; + int log_fd; + struct iovec vec[3]; + + if (log_id < LOG_ID_MAX) + log_fd = log_fds[log_id]; + else + return -1; // for TC + + if (!tag) + tag = ""; + + if (!msg) + return -1; + + vec[0].iov_base = (unsigned char *) &prio; + vec[0].iov_len = 1; + vec[1].iov_base = (void *) tag; + vec[1].iov_len = strlen(tag) + 1; + vec[2].iov_base = (void *) msg; + vec[2].iov_len = strlen(msg) + 1; + + ret = writev(log_fd, vec, 3); + + return ret; +} +static char dlog_pri_to_char (log_priority pri) +{ + switch (pri) { + case DLOG_VERBOSE: return 'V'; + case DLOG_DEBUG: return 'D'; + case DLOG_INFO: return 'I'; + case DLOG_WARN: return 'W'; + case DLOG_ERROR: return 'E'; + case DLOG_FATAL: return 'F'; + case DLOG_SILENT: return 'S'; + + case DLOG_DEFAULT: + case DLOG_UNKNOWN: + default: + return '?'; + } +} #ifdef SD_JOURNAL_SUPPORT static int dlog_pri_to_journal_pri(log_priority prio) { @@ -80,41 +128,7 @@ static int dlog_pri_to_journal_pri(log_priority prio) } static int __write_to_log_sd_journal_print(log_id_t log_id, log_priority prio, const char *tag, const char *msg) { - sd_journal_print(dlog_pri_to_journal_pri(prio), "%s %s", tag, msg); - return 1; -} -#else -static int __write_to_log_kernel(log_id_t log_id, log_priority prio, const char *tag, const char *msg) -{ - ssize_t ret; - int log_fd; - struct iovec vec[3]; - - if (log_id < LOG_ID_APPS) { - if(prio < g_dlog_level) { - return 0; - } - } else if (LOG_ID_MAX <= log_id) { - return 0; - } - if (log_id < LOG_ID_MAX) - log_fd = log_fds[log_id]; - else - return -1; // for TC - - if (!tag) - tag = ""; - - vec[0].iov_base = (unsigned char *) &prio; - vec[0].iov_len = 1; - vec[1].iov_base = (void *) tag; - vec[1].iov_len = strlen(tag) + 1; - vec[2].iov_base = (void *) msg; - vec[2].iov_len = strlen(msg) + 1; - - ret = writev(log_fd, vec, 3); - - return ret; + return sd_journal_print(dlog_pri_to_journal_pri(prio), "%c %s: %s", dlog_pri_to_char(prio), tag, msg); } #endif void init_dlog_level(void) @@ -137,17 +151,14 @@ void init_dlog_level(void) } } else g_dlog_level = 8; + g_dlog_level_init = 1; } static int __dlog_init(log_id_t log_id, log_priority prio, const char *tag, const char *msg) { pthread_mutex_lock(&log_init_lock); -#ifdef SD_JOURNAL_SUPPORT - write_to_log = __write_to_log_sd_journal_print; -#else // get filtering info // open device if (write_to_log == __dlog_init) { - init_dlog_level(); log_fds[LOG_ID_MAIN] = open("/dev/"LOG_MAIN, O_WRONLY); log_fds[LOG_ID_RADIO] = open("/dev/"LOG_RADIO, O_WRONLY); @@ -155,18 +166,20 @@ static int __dlog_init(log_id_t log_id, log_priority prio, const char *tag, cons log_fds[LOG_ID_APPS] = open("/dev/"LOG_APPS, O_WRONLY); if (log_fds[LOG_ID_MAIN] < 0 || log_fds[LOG_ID_RADIO] < 0) { - fprintf(stderr, "open log dev is failed\n"); write_to_log = __write_to_log_null; - } else + } else { +#ifdef SD_JOURNAL_SUPPORT + write_to_log = __write_to_log_sd_journal_print; +#else write_to_log = __write_to_log_kernel; +#endif + } if (log_fds[LOG_ID_SYSTEM] < 0) log_fds[LOG_ID_SYSTEM] = log_fds[LOG_ID_MAIN]; - if (log_fds[LOG_ID_APPS] < 0) log_fds[LOG_ID_APPS] = log_fds[LOG_ID_MAIN]; } -#endif pthread_mutex_unlock(&log_init_lock); return write_to_log(log_id, prio, tag, msg); } @@ -174,6 +187,16 @@ static int __dlog_init(log_id_t log_id, log_priority prio, const char *tag, cons int __dlog_vprint(log_id_t log_id, int prio, const char *tag, const char *fmt, va_list ap) { char buf[LOG_BUF_SIZE]; + if (!g_dlog_level_init) { + init_dlog_level(); + } + if (log_id < LOG_ID_APPS) { + if(prio < g_dlog_level) { + return 0; + } + } else if (LOG_ID_MAX <= log_id) { + return 0; + } vsnprintf(buf, LOG_BUF_SIZE, fmt, ap); @@ -185,6 +208,17 @@ int __dlog_print(log_id_t log_id, int prio, const char *tag, const char *fmt, .. va_list ap; char buf[LOG_BUF_SIZE]; + if (!g_dlog_level_init) { + init_dlog_level(); + } + if (log_id < LOG_ID_APPS) { + if(prio < g_dlog_level) { + return 0; + } + } else if (LOG_ID_MAX <= log_id) { + return 0; + } + va_start(ap, fmt); vsnprintf(buf, LOG_BUF_SIZE, fmt, ap); va_end(ap);