1、【增加】软件运行时动态使能及失能异步及缓冲输出模式功能。使得软件在出现异常时,异常日志可以在被正常输出。

Signed-off-by: armink <armink.ztl@gmail.com>
pull/3/merge
armink 9 years ago
parent ccc7799b09
commit 3fee41c061

@ -121,6 +121,12 @@ void sys_init_thread(void* parameter){
} }
static void elog_user_assert_hook(const char* ex, const char* func, size_t line) { static void elog_user_assert_hook(const char* ex, const char* func, size_t line) {
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
/* disable async output */
elog_async_enabled(false);
#endif
/* disable logger output lock */ /* disable logger output lock */
elog_output_lock_enabled(false); elog_output_lock_enabled(false);
/* disable flash plugin lock */ /* disable flash plugin lock */
@ -133,6 +139,12 @@ static void elog_user_assert_hook(const char* ex, const char* func, size_t line)
} }
static void rtt_user_assert_hook(const char* ex, const char* func, rt_size_t line) { static void rtt_user_assert_hook(const char* ex, const char* func, rt_size_t line) {
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
/* disable async output */
elog_async_enabled(false);
#endif
/* disable logger output lock */ /* disable logger output lock */
elog_output_lock_enabled(false); elog_output_lock_enabled(false);
/* disable flash plugin lock */ /* disable flash plugin lock */

@ -50,7 +50,7 @@ extern "C" {
#define ELOG_LVL_TOTAL_NUM 6 #define ELOG_LVL_TOTAL_NUM 6
/* EasyLogger software version number */ /* EasyLogger software version number */
#define ELOG_SW_VERSION "1.11.13" #define ELOG_SW_VERSION "1.11.22"
/* EasyLogger assert for developer. */ /* EasyLogger assert for developer. */
#ifdef ELOG_ASSERT_ENABLE #ifdef ELOG_ASSERT_ENABLE
@ -190,9 +190,11 @@ void elog_assert_set_hook(void (*hook)(const char* expr, const char* func, size_
/* elog_buf.c */ /* elog_buf.c */
void elog_flush(void); void elog_flush(void);
void elog_buf_enabled(bool enabled);
/* elog_async.c */ /* elog_async.c */
size_t elog_async_get_log(char *log, size_t size); size_t elog_async_get_log(char *log, size_t size);
void elog_async_enabled(bool enabled);
/* elog_utils.c */ /* elog_utils.c */
size_t elog_strcpy(size_t cur_len, char *dst, const char *src); size_t elog_strcpy(size_t cur_len, char *dst, const char *src);

@ -61,7 +61,7 @@
#define ELOG_ASYNC_OUTPUT_USING_PTHREAD #define ELOG_ASYNC_OUTPUT_USING_PTHREAD
/* enable buffered output mode */ /* enable buffered output mode */
#define ELOG_BUFF_OUTPUT_ENABLE #define ELOG_BUF_OUTPUT_ENABLE
/* buffer size for buffered output mode */ /* buffer size for buffered output mode */
#define ELOG_BUF_OUTPUT_BUF_SIZE (ELOG_LINE_BUF_SIZE * 10) #define ELOG_BUF_OUTPUT_BUF_SIZE (ELOG_LINE_BUF_SIZE * 10)

@ -173,7 +173,6 @@ ElogErrCode elog_init(void) {
/* set level is ELOG_LVL_VERBOSE */ /* set level is ELOG_LVL_VERBOSE */
elog_set_filter_lvl(ELOG_LVL_VERBOSE); elog_set_filter_lvl(ELOG_LVL_VERBOSE);
return result; return result;
} }
@ -183,6 +182,13 @@ ElogErrCode elog_init(void) {
void elog_start(void) { void elog_start(void) {
/* enable output */ /* enable output */
elog_set_output_enabled(true); elog_set_output_enabled(true);
#if defined(ELOG_ASYNC_OUTPUT_ENABLE)
elog_async_enabled(true);
#elif defined(ELOG_BUF_OUTPUT_ENABLE)
elog_buf_enabled(true);
#endif
/* show version */ /* show version */
elog_i(log_tag, "EasyLogger V%s is initialize success.", ELOG_SW_VERSION); elog_i(log_tag, "EasyLogger V%s is initialize success.", ELOG_SW_VERSION);
elog_i(log_tag, "You can get the latest version on https://github.com/armink/EasyLogger ."); elog_i(log_tag, "You can get the latest version on https://github.com/armink/EasyLogger .");
@ -341,7 +347,7 @@ void elog_raw(const char *format, ...) {
#if defined(ELOG_ASYNC_OUTPUT_ENABLE) #if defined(ELOG_ASYNC_OUTPUT_ENABLE)
extern void elog_async_output(const char *log, size_t size); extern void elog_async_output(const char *log, size_t size);
elog_async_output(log_buf, log_len); elog_async_output(log_buf, log_len);
#elif defined(ELOG_BUFF_OUTPUT_ENABLE) #elif defined(ELOG_BUF_OUTPUT_ENABLE)
extern void elog_buf_output(const char *log, size_t size); extern void elog_buf_output(const char *log, size_t size);
elog_buf_output(log_buf, log_len); elog_buf_output(log_buf, log_len);
#else #else
@ -491,7 +497,7 @@ void elog_output(uint8_t level, const char *tag, const char *file, const char *f
#if defined(ELOG_ASYNC_OUTPUT_ENABLE) #if defined(ELOG_ASYNC_OUTPUT_ENABLE)
extern void elog_async_output(const char *log, size_t size); extern void elog_async_output(const char *log, size_t size);
elog_async_output(log_buf, log_len); elog_async_output(log_buf, log_len);
#elif defined(ELOG_BUFF_OUTPUT_ENABLE) #elif defined(ELOG_BUF_OUTPUT_ENABLE)
extern void elog_buf_output(const char *log, size_t size); extern void elog_buf_output(const char *log, size_t size);
elog_buf_output(log_buf, log_len); elog_buf_output(log_buf, log_len);
#else #else

@ -63,6 +63,8 @@ static pthread_t async_output_thread;
/* Initialize OK flag */ /* Initialize OK flag */
static bool init_ok = false; static bool init_ok = false;
/* asynchronous output mode enabled flag */
static bool is_enabled = false;
/* asynchronous output mode's ring buffer */ /* asynchronous output mode's ring buffer */
static char log_buf[ELOG_ASYNC_OUTPUT_BUF_SIZE] = { 0 }; static char log_buf[ELOG_ASYNC_OUTPUT_BUF_SIZE] = { 0 };
/* log ring buffer write index */ /* log ring buffer write index */
@ -193,10 +195,14 @@ void elog_async_output(const char *log, size_t size) {
extern void elog_async_output_notice(void); extern void elog_async_output_notice(void);
size_t put_size; size_t put_size;
put_size = async_put_log(log, size); if (is_enabled) {
/* notify output log thread */ put_size = async_put_log(log, size);
if (put_size > 0) { /* notify output log thread */
elog_async_output_notice(); if (put_size > 0) {
elog_async_output_notice();
}
} else {
elog_port_output(log, size);
} }
} }
@ -228,6 +234,16 @@ static void *async_output(void *arg) {
} }
#endif #endif
/**
* enable or disable asynchronous output mode
* the log will be output directly when mode is disabled
*
* @param enabled true: enabled, false: disabled
*/
void elog_async_enabled(bool enabled) {
is_enabled = enabled;
}
/** /**
* asynchronous output mode initialize * asynchronous output mode initialize
* *

@ -38,6 +38,8 @@
static char log_buf[ELOG_BUF_OUTPUT_BUF_SIZE] = { 0 }; static char log_buf[ELOG_BUF_OUTPUT_BUF_SIZE] = { 0 };
/* log buffer current write size */ /* log buffer current write size */
static size_t buf_write_size = 0; static size_t buf_write_size = 0;
/* buffered output mode enabled flag */
static bool is_enabled = false;
extern void elog_port_output(const char *log, size_t size); extern void elog_port_output(const char *log, size_t size);
extern void elog_output_lock(void); extern void elog_output_lock(void);
@ -52,6 +54,11 @@ extern void elog_output_unlock(void);
void elog_buf_output(const char *log, size_t size) { void elog_buf_output(const char *log, size_t size) {
size_t write_size = 0, write_index = 0; size_t write_size = 0, write_index = 0;
if (!is_enabled) {
elog_port_output(log, size);
return;
}
while (true) { while (true) {
if (buf_write_size + size > ELOG_BUF_OUTPUT_BUF_SIZE) { if (buf_write_size + size > ELOG_BUF_OUTPUT_BUF_SIZE) {
write_size = ELOG_BUF_OUTPUT_BUF_SIZE - buf_write_size; write_size = ELOG_BUF_OUTPUT_BUF_SIZE - buf_write_size;
@ -84,4 +91,14 @@ void elog_flush(void) {
/* unlock output */ /* unlock output */
elog_output_unlock(); elog_output_unlock();
} }
/**
* enable or disable buffered output mode
* the log will be output directly when mode is disabled
*
* @param enabled true: enabled, false: disabled
*/
void elog_buf_enabled(bool enabled) {
is_enabled = enabled;
}
#endif /* ELOG_BUF_OUTPUT_ENABLE */ #endif /* ELOG_BUF_OUTPUT_ENABLE */

Loading…
Cancel
Save