mirror of
https://github.com/armink/EasyLogger.git
synced 2025-01-31 21:42:53 +08:00
[easylogger] [demo][linux] add deinit for linux
This commit is contained in:
parent
e442625088
commit
bb20ae32f6
13
demo/os/linux/easylogger/port/elog_file_port.c
Normal file → Executable file
13
demo/os/linux/easylogger/port/elog_file_port.c
Normal file → Executable file
@ -55,6 +55,8 @@ static struct sembuf const down = {0, -1, SEM_UNDO};
|
|||||||
|
|
||||||
static void lock_init(void);
|
static void lock_init(void);
|
||||||
static int lock_open(void);
|
static int lock_open(void);
|
||||||
|
static void lock_deinit(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EasyLogger flile log pulgin port initialize
|
* EasyLogger flile log pulgin port initialize
|
||||||
*
|
*
|
||||||
@ -83,12 +85,13 @@ void inline elog_file_port_unlock(void)
|
|||||||
{
|
{
|
||||||
semid == -1 ? -1 : semop(semid, (struct sembuf *)&up, 1);
|
semid == -1 ? -1 : semop(semid, (struct sembuf *)&up, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* file log deinit
|
* file log deinit
|
||||||
*/
|
*/
|
||||||
void elog_file_port_deinit(void)
|
void elog_file_port_deinit(void)
|
||||||
{
|
{
|
||||||
|
lock_deinit();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -158,3 +161,11 @@ static int lock_open(void)
|
|||||||
err:
|
err:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* deinitialize the lock
|
||||||
|
*/
|
||||||
|
static void lock_deinit(void)
|
||||||
|
{
|
||||||
|
semid = -1;
|
||||||
|
}
|
||||||
|
13
demo/os/linux/easylogger/port/elog_port.c
Normal file → Executable file
13
demo/os/linux/easylogger/port/elog_port.c
Normal file → Executable file
@ -54,6 +54,19 @@ ElogErrCode elog_port_init(void) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EasyLogger port deinitialize
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void elog_port_deinit(void) {
|
||||||
|
#ifdef ELOG_FILE_ENABLE
|
||||||
|
elog_file_deinit();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
pthread_mutex_destroy(&output_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* output log port interface
|
* output log port interface
|
||||||
*
|
*
|
||||||
|
2
easylogger/inc/elog.h
Normal file → Executable file
2
easylogger/inc/elog.h
Normal file → Executable file
@ -177,7 +177,9 @@ typedef enum {
|
|||||||
|
|
||||||
/* elog.c */
|
/* elog.c */
|
||||||
ElogErrCode elog_init(void);
|
ElogErrCode elog_init(void);
|
||||||
|
void elog_deinit(void);
|
||||||
void elog_start(void);
|
void elog_start(void);
|
||||||
|
void elog_stop(void);
|
||||||
void elog_set_output_enabled(bool enabled);
|
void elog_set_output_enabled(bool enabled);
|
||||||
bool elog_get_output_enabled(void);
|
bool elog_get_output_enabled(void);
|
||||||
void elog_set_text_color_enabled(bool enabled);
|
void elog_set_text_color_enabled(bool enabled);
|
||||||
|
27
easylogger/plugins/file/elog_file.c
Normal file → Executable file
27
easylogger/plugins/file/elog_file.c
Normal file → Executable file
@ -143,23 +143,32 @@ void elog_file_deinit(void)
|
|||||||
{
|
{
|
||||||
ELOG_ASSERT(init_ok);
|
ELOG_ASSERT(init_ok);
|
||||||
|
|
||||||
|
ElogFileCfg cfg = {NULL, 0, 0};
|
||||||
|
|
||||||
|
elog_file_config(&cfg);
|
||||||
|
|
||||||
elog_file_port_deinit();
|
elog_file_port_deinit();
|
||||||
fclose(fp);
|
|
||||||
|
init_ok = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void elog_file_config(ElogFileCfg *cfg)
|
void elog_file_config(ElogFileCfg *cfg)
|
||||||
{
|
{
|
||||||
if (fp) {
|
|
||||||
fclose(fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
elog_file_port_lock();
|
elog_file_port_lock();
|
||||||
|
|
||||||
local_cfg.name = cfg->name;
|
if (fp) {
|
||||||
local_cfg.max_size = cfg->max_size;
|
fclose(fp);
|
||||||
local_cfg.max_rotate = cfg->max_rotate;
|
fp = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
fp = fopen(local_cfg.name, "a+");
|
if (cfg != NULL) {
|
||||||
|
local_cfg.name = cfg->name;
|
||||||
|
local_cfg.max_size = cfg->max_size;
|
||||||
|
local_cfg.max_rotate = cfg->max_rotate;
|
||||||
|
|
||||||
|
if (local_cfg.name != NULL && strlen(local_cfg.name) > 0)
|
||||||
|
fp = fopen(local_cfg.name, "a+");
|
||||||
|
}
|
||||||
|
|
||||||
elog_file_port_unlock();
|
elog_file_port_unlock();
|
||||||
}
|
}
|
||||||
|
10
easylogger/port/elog_port.c
Normal file → Executable file
10
easylogger/port/elog_port.c
Normal file → Executable file
@ -41,6 +41,16 @@ ElogErrCode elog_port_init(void) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EasyLogger port deinitialize
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void elog_port_deinit(void) {
|
||||||
|
|
||||||
|
/* add your code here */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* output log port interface
|
* output log port interface
|
||||||
*
|
*
|
||||||
|
49
easylogger/src/elog.c
Normal file → Executable file
49
easylogger/src/elog.c
Normal file → Executable file
@ -200,10 +200,37 @@ ElogErrCode elog_init(void) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EasyLogger deinitialize.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void elog_deinit(void) {
|
||||||
|
extern ElogErrCode elog_port_deinit(void);
|
||||||
|
extern ElogErrCode elog_async_deinit(void);
|
||||||
|
|
||||||
|
if (!elog.init_ok) {
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
|
||||||
|
elog_async_deinit();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* port deinitialize */
|
||||||
|
elog_port_deinit();
|
||||||
|
|
||||||
|
elog.init_ok = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EasyLogger start after initialize.
|
* EasyLogger start after initialize.
|
||||||
*/
|
*/
|
||||||
void elog_start(void) {
|
void elog_start(void) {
|
||||||
|
if (!elog.init_ok) {
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
/* enable output */
|
/* enable output */
|
||||||
elog_set_output_enabled(true);
|
elog_set_output_enabled(true);
|
||||||
|
|
||||||
@ -217,6 +244,28 @@ void elog_start(void) {
|
|||||||
log_i("EasyLogger V%s is initialize success.", ELOG_SW_VERSION);
|
log_i("EasyLogger V%s is initialize success.", ELOG_SW_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EasyLogger stop after initialize.
|
||||||
|
*/
|
||||||
|
void elog_stop(void) {
|
||||||
|
if (!elog.init_ok) {
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* disable output */
|
||||||
|
elog_set_output_enabled(false);
|
||||||
|
|
||||||
|
#if defined(ELOG_ASYNC_OUTPUT_ENABLE)
|
||||||
|
elog_async_enabled(false);
|
||||||
|
#elif defined(ELOG_BUF_OUTPUT_ENABLE)
|
||||||
|
elog_buf_enabled(false);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* show version */
|
||||||
|
log_i("EasyLogger V%s is deinitialize success.", ELOG_SW_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set output enable or disable
|
* set output enable or disable
|
||||||
*
|
*
|
||||||
|
32
easylogger/src/elog_async.c
Normal file → Executable file
32
easylogger/src/elog_async.c
Normal file → Executable file
@ -74,6 +74,8 @@ static pthread_t async_output_thread;
|
|||||||
|
|
||||||
/* Initialize OK flag */
|
/* Initialize OK flag */
|
||||||
static bool init_ok = false;
|
static bool init_ok = false;
|
||||||
|
/* thread running flag */
|
||||||
|
static bool thread_running = false;
|
||||||
/* asynchronous output mode enabled flag */
|
/* asynchronous output mode enabled flag */
|
||||||
static bool is_enabled = false;
|
static bool is_enabled = false;
|
||||||
/* asynchronous output mode's ring buffer */
|
/* asynchronous output mode's ring buffer */
|
||||||
@ -283,7 +285,7 @@ static void *async_output(void *arg) {
|
|||||||
size_t get_log_size = 0;
|
size_t get_log_size = 0;
|
||||||
static char poll_get_buf[ELOG_ASYNC_POLL_GET_LOG_BUF_SIZE];
|
static char poll_get_buf[ELOG_ASYNC_POLL_GET_LOG_BUF_SIZE];
|
||||||
|
|
||||||
while(true) {
|
while(thread_running) {
|
||||||
/* waiting log */
|
/* waiting log */
|
||||||
sem_wait(&output_notice);
|
sem_wait(&output_notice);
|
||||||
/* polling gets and outputs the log */
|
/* polling gets and outputs the log */
|
||||||
@ -334,8 +336,10 @@ ElogErrCode elog_async_init(void) {
|
|||||||
|
|
||||||
sem_init(&output_notice, 0, 0);
|
sem_init(&output_notice, 0, 0);
|
||||||
|
|
||||||
|
thread_running = true;
|
||||||
|
|
||||||
pthread_attr_init(&thread_attr);
|
pthread_attr_init(&thread_attr);
|
||||||
pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
|
//pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
|
||||||
pthread_attr_setstacksize(&thread_attr, ELOG_ASYNC_OUTPUT_PTHREAD_STACK_SIZE);
|
pthread_attr_setstacksize(&thread_attr, ELOG_ASYNC_OUTPUT_PTHREAD_STACK_SIZE);
|
||||||
pthread_attr_setschedpolicy(&thread_attr, SCHED_RR);
|
pthread_attr_setschedpolicy(&thread_attr, SCHED_RR);
|
||||||
thread_sched_param.sched_priority = ELOG_ASYNC_OUTPUT_PTHREAD_PRIORITY;
|
thread_sched_param.sched_priority = ELOG_ASYNC_OUTPUT_PTHREAD_PRIORITY;
|
||||||
@ -349,4 +353,28 @@ ElogErrCode elog_async_init(void) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* asynchronous output mode deinitialize
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void elog_async_deinit(void) {
|
||||||
|
if (!init_ok) {
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef ELOG_ASYNC_OUTPUT_USING_PTHREAD
|
||||||
|
thread_running = false;
|
||||||
|
|
||||||
|
elog_async_output_notice();
|
||||||
|
|
||||||
|
pthread_join(async_output_thread, NULL);
|
||||||
|
|
||||||
|
sem_destroy(&output_notice);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
init_ok = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* ELOG_ASYNC_OUTPUT_ENABLE */
|
#endif /* ELOG_ASYNC_OUTPUT_ENABLE */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user