TT12-MCU/applications/log2file.c

115 lines
3.2 KiB
C

/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2023-06-16 murmur the first version
*/
#include <..\rt-thread\components\utilities\ulog\backend\ulog_be.h>
#include "usrcfg.h"
/*
* 后端注册表
*/
struct _log_file
{
char *name; //文件名
ulog_backend_t backend;
struct ulog_file_be *file_be;
const char *dir_path; //保存路径
rt_size_t max_num; //保存最大文件数量
rt_size_t max_size; //保存最大文件大小
rt_size_t buf_size; //文件保存缓存大小
};
/*
* 文件后端标识
*/
typedef enum
{
console_id,
sys_id,
motion_id,
}ulog_file_be_name;
#define ROOT_PATH ROOT_PATH_DEBUG //设置保存路径
#define FILE_SIZE 10*1024 //设置单个文件大小
#define BUFF_SIZE 1*1024 //设备缓存区大小
static struct ulog_backend sys_log_backend;
static struct ulog_file_be sys_log_file;
char logfilename[30];// = "23_08_27";
extern char *getTimestmp(char *str);
static struct _log_file table[] =
{
{"motion" ,&sys_log_backend,&sys_log_file,ROOT_PATH,5,FILE_SIZE,BUFF_SIZE},
{"sys" ,&sys_log_backend,&sys_log_file,ROOT_PATH,10,FILE_SIZE,BUFF_SIZE},
};
/* Private function prototypes -----------------------------------------------*/
/**
* @brief 系统日志文件后端滤波器设置.
* @param None.
* @retval The filter will be call before output. It will return TRUE when the filter condition is math.
* @note None.
*/
static rt_bool_t sys_log_file_backend_filter(struct ulog_backend *backend, rt_uint32_t level, const char *tag, rt_bool_t is_raw,
const char *log, rt_size_t len)
{
//设置滤波规则,可以自己编写代码实现不同滤波规则
// if (rt_strncmp(tag,"MOVE", sizeof(MOTION_TAG)) == 0)//排除带有"MOVE"标签输出
// return RT_FALSE;
// else
// return RT_TRUE;
if (level < LOG_LVL_DBG)//"DEBUG"
return RT_TRUE;
else
return RT_FALSE;
}
/**
* @brief 系统日志文件后端初始化.
* @param None.
* @retval None.
* @note None.
*/
static char tmstr[30];//定义时间前缀
void sys_log_file_backend_init(void)
{
static struct ulog_file_be *file_be = &sys_log_file;
uint8_t id = sys_id;
file_be->parent = sys_log_backend;
getTimestmp(tmstr);
strncpy(logfilename,tmstr,14);
tmstr[14]='\0';
tmstr[10]='#';
ulog_file_backend_init( file_be,
strcat(tmstr,table[id].name),
table[id].dir_path,
table[id].max_num,
table[id].max_size,
table[id].buf_size);
ulog_file_backend_enable(file_be); //必须使能才能有效
//新增代码
ulog_backend_filter_t filter = sys_log_file_backend_filter;
ulog_backend_set_filter(&file_be->parent,filter);
}
void updateLogFileBackend()
{
ulog_file_backend_deinit(&sys_log_file);
sys_log_file_backend_init();
}
MSH_CMD_EXPORT(sys_log_file_backend_init,log2file);
INIT_APP_EXPORT(sys_log_file_backend_init);