This patch adds logging API for users with custom tag.
Signed-off-by: Dongju Chae <dongju.chae@samsung.com>
/* TODO: Add more options if needed */
} npu_profile_opt;
+typedef enum {
+ NPU_LOG_NONE = 0,
+ NPU_LOG_ERROR,
+ NPU_LOG_WARN,
+ NPU_LOG_INFO,
+ NPU_LOG_END,
+} npu_loglevel;
+
#endif /* NPU_TYPEDEF_H__ */
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
+#include <stdarg.h>
#include <typedef.h>
#include <npubinfmt.h>
*/
void putNPU_statReqs (npu_stat_reqs *stat);
+/**
+ * @brief Write logs
+ * @param[in] level log severity level
+ * @param[in] tag log tag for users
+ * @param[in] format log format string
+ * @return 0 if no error. Otherwise a negative errno
+ */
+int writeNPU_log (npu_loglevel level, const char *tag, const char *format, ...);
+
+#define writeNPU_logInfo(tag, format, ...) \
+ writeNPU_log (NPU_LOG_INFO, tag, format, ##__VA_ARGS__)
+#define writeNPU_logWarn(tag, format, ...) \
+ writeNPU_log (NPU_LOG_WARN, tag, format, ##__VA_ARGS__)
+#define writeNPU_logError(tag, format, ...) \
+ writeNPU_log (NPU_LOG_ERROR, tag, format, ##__VA_ARGS__)
+
#if defined(__cplusplus)
}
#endif
ne_core_utils_dep = declare_dependency (
sources : ne_core_utils_src,
dependencies : ne_core_utils_deps,
- include_directories : ne_core_utils_inc
+ include_directories : [ne_core_utils_inc, ne_common_inc]
)
/**
* @brief Log Level String in 5 characters
*/
-static const char *loglevelstr[LOG_END] = {
- [LOG_NONE] = "NONE",
- [LOG_ERROR] = "ERROR",
- [LOG_WARN] = "WARN ",
- [LOG_INFO] = "INFO ",
+static const char *loglevelstr[NPU_LOG_END] = {
+ [NPU_LOG_NONE] = "NONE",
+ [NPU_LOG_ERROR] = "ERROR",
+ [NPU_LOG_WARN] = "WARN ",
+ [NPU_LOG_INFO] = "INFO ",
};
/**
* a negative value is returned. Note that 0 is not regarded as an error.
*/
int
-Logger::logwrite (loglevel l, module m, const char *format, ...) {
+Logger::logwrite (npu_loglevel l, module m, const char *format, ...) {
+ va_list args;
int ret;
- if (l <= LOG_NONE || l >= LOG_END)
+ if (l <= NPU_LOG_NONE || l >= NPU_LOG_END)
return -EINVAL;
- if (m < _N1 || m >= _NEND)
+ if (format == nullptr)
return -EINVAL;
- if (format == nullptr)
+ if (m < _N1 || m >= _NEND)
return -EINVAL;
+ va_start (args, format);
+ ret = logwrite_args (l, modulestr[m], format, args);
+ va_end (args);
+
+ return ret;
+}
+
+int
+Logger::logwrite_args (npu_loglevel l, const char *tag, const char *format,
+ va_list args) {
+ int ret;
+
std::unique_lock<std::mutex> lock (m_);
time_t ltime = time (nullptr);
char *time_str;
- va_list args;
/**
* localtime() and asctime() are not MT-safe. There are alternatives,
char log_msg[MAX_LOG_MSG];
int log_len = snprintf (log_msg, MAX_LOG_MSG, "[%s][%s][%s] ", loglevelstr[l],
- modulestr[m], time_str);
+ tag, time_str);
- va_start (args, format);
log_len += vsnprintf (log_msg + log_len, MAX_LOG_MSG - log_len, format, args);
- va_end (args);
if (Conf::getInstance ().getLogLevel () >= l) {
fprintf (stderr, "%s\n", log_msg);
}
#ifdef __TIZEN__
- if (l == LOG_ERROR)
+ if (l == NPU_LOG_ERROR)
ml_loge ("%s", log_msg);
- else if (l == LOG_WARN)
+ else if (l == NPU_LOG_WARN)
ml_logw ("%s", log_msg);
- else if (l == LOG_INFO)
+ else if (l == NPU_LOG_INFO)
ml_logi ("%s", log_msg);
#endif
#include <condition_variable>
#include <functional>
+#include <typedef.h>
#include <sys/user.h> /* PAGE_SIZE */
#ifndef PAGE_SHIFT
#define ml_logf(...) dlog_print (DLOG_FATAL, TAG_NAME, __VA_ARGS__)
#endif
-typedef enum {
- LOG_NONE = 0,
- LOG_ERROR,
- LOG_WARN,
- LOG_INFO,
- LOG_END,
-} loglevel;
-
/**
* @brief Module definitions
* @detail
public:
static Logger &getInstance ();
- int logwrite (loglevel l, module m, const char *format, ...);
+ int logwrite (npu_loglevel l, module m, const char *format, ...);
+ int logwrite_args (npu_loglevel l, const char *tag, const char *format,
+ va_list args);
~Logger ();
/** @brief log macros with different log levels */
#define __FILENAME__ \
(strrchr (__FILE__, '/') ? strrchr (__FILE__, '/') + 1 : __FILE__)
-#define logerr(m, fmt, ...) \
- Logger::getInstance ().logwrite (LOG_ERROR, m, "(%s:%d) " fmt, __FILENAME__, \
- __LINE__, ##__VA_ARGS__)
-#define logwarn(m, fmt, ...) \
- Logger::getInstance ().logwrite (LOG_WARN, m, "(%s:%d) " fmt, __FILENAME__, \
- __LINE__, ##__VA_ARGS__)
-#define loginfo(m, fmt, ...) \
- Logger::getInstance ().logwrite (LOG_INFO, m, "(%s:%d) " fmt, __FILENAME__, \
- __LINE__, ##__VA_ARGS__)
+#define logerr(m, fmt, ...) \
+ Logger::getInstance ().logwrite (NPU_LOG_ERROR, m, "(%s:%d) " fmt, \
+ __FILENAME__, __LINE__, ##__VA_ARGS__)
+#define logwarn(m, fmt, ...) \
+ Logger::getInstance ().logwrite (NPU_LOG_WARN, m, "(%s:%d) " fmt, \
+ __FILENAME__, __LINE__, ##__VA_ARGS__)
+#define loginfo(m, fmt, ...) \
+ Logger::getInstance ().logwrite (NPU_LOG_INFO, m, "(%s:%d) " fmt, \
+ __FILENAME__, __LINE__, ##__VA_ARGS__)
/** @brief thread-safe map */
template <typename K, typename V>
return nullptr;
}
+
+/**
+ * @brief Write logs
+ * @param[in] level log severity level
+ * @param[in] tag log tag for identification
+ * @param[in] format log format string
+ * @return 0 if no error. Otherwise a negative errno
+ */
+int
+writeNPU_log (npu_loglevel level, const char *tag, const char *format, ...) {
+ va_list args;
+ int ret;
+
+ if (level <= NPU_LOG_NONE || level >= NPU_LOG_END)
+ return -EINVAL;
+
+ if (tag == nullptr || format == nullptr)
+ return -EINVAL;
+
+ va_start (args, format);
+ ret = Logger::getInstance ().logwrite_args (level, tag, format, args);
+ va_end (args);
+
+ return ret;
+}
Logger &logger = Logger::getInstance ();
int ret;
- ret = logger.logwrite (LOG_ERROR, _N1, "test error\n");
+ ret = logger.logwrite (NPU_LOG_ERROR, _N1, "test error\n");
EXPECT_GE (ret, 0);
- ret = logger.logwrite (LOG_WARN, _N1, "test warn\n");
+ ret = logger.logwrite (NPU_LOG_WARN, _N1, "test warn\n");
EXPECT_GE (ret, 0);
- ret = logger.logwrite (LOG_INFO, _N1, "test info\n");
+ ret = logger.logwrite (NPU_LOG_INFO, _N1, "test info\n");
EXPECT_GE (ret, 0);
}
/** logwrite is ignored for invalid arguments */
int ret;
- ret = logger.logwrite (LOG_END, _NEND, "invalid\n");
+ ret = logger.logwrite (NPU_LOG_END, _NEND, "invalid\n");
EXPECT_LT (ret, 0);
- ret = logger.logwrite (LOG_END, _N1, "invalid\n");
+ ret = logger.logwrite (NPU_LOG_END, _N1, "invalid\n");
EXPECT_LT (ret, 0);
- ret = logger.logwrite (LOG_INFO, _NEND, "invalid\n");
+ ret = logger.logwrite (NPU_LOG_INFO, _NEND, "invalid\n");
EXPECT_LT (ret, 0);
- ret = logger.logwrite (LOG_INFO, _N1, nullptr);
+ ret = logger.logwrite (NPU_LOG_INFO, _N1, nullptr);
EXPECT_LT (ret, 0);
}