375dbf5fc4
更新版本号为2.61d
171 lines
4.7 KiB
C
171 lines
4.7 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 <dfs_file.h>
|
|
#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 100*1024 //设置单个文件大小
|
|
#define BUFF_SIZE 1*1024 //设备缓存区大小
|
|
|
|
static struct ulog_backend sys_log_backend;
|
|
static struct ulog_file_be sys_log_file;
|
|
|
|
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 logfilename[50];// = "2023-08-27/2023-08-27#11-";
|
|
static char tmstr[50];//定义时间前缀
|
|
static 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;
|
|
|
|
// char logfilename[50];// = "2023-08-27/2023-08-27#11-";
|
|
// char tmstr[50];//定义时间前缀
|
|
memset(logfilename,0,50);
|
|
memset(tmstr,0,50);
|
|
getTimestmp(tmstr);// 2023-08-27 11-44-42-65
|
|
tmstr[10]='#';//2023-08-27#11-
|
|
tmstr[14]='\0';
|
|
|
|
//以天为独立文件夹
|
|
strncpy(logfilename,tmstr,10);
|
|
char dir[30]=ROOT_PATH;
|
|
mkdir(dir, 0);//sd/debug
|
|
rt_thread_mdelay(100);
|
|
strcat(dir,"/");
|
|
strcat(dir,logfilename);//sd/debug/2023-08-27
|
|
// LOG_D("dir=%s",dir);
|
|
mkdir(dir, 0);
|
|
rt_thread_mdelay(100);
|
|
strcat(logfilename,"/");
|
|
// LOG_D("f=%s",logfilename);
|
|
//总路径不能太长
|
|
strcat(logfilename,tmstr+11);//sd/debug/2023-09-03/11-
|
|
// LOG_D("f=%s",tmstr);
|
|
// LOG_D("f=%s",logfilename);
|
|
// ulog_file_backend_deinit(file_be);
|
|
|
|
|
|
ulog_file_backend_disable(file_be); //先关闭
|
|
ulog_file_backend_deinit(file_be);
|
|
ulog_file_backend_init( file_be,
|
|
strcat(logfilename,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);
|
|
}
|
|
static int isToUpdate = 1;
|
|
static void sys_log_init_thread_entry(void *parameter)
|
|
{
|
|
while (1)
|
|
{
|
|
if(isToUpdate)
|
|
{
|
|
isToUpdate = 0;
|
|
sys_log_file_backend_init();
|
|
}
|
|
rt_thread_mdelay(30*1000);
|
|
}
|
|
}
|
|
|
|
static void initLogFileBackend()
|
|
{
|
|
/* 创建 serial 线程 */
|
|
rt_thread_t thread = rt_thread_create("updateLogName", sys_log_init_thread_entry, RT_NULL, 1024*5, 29, 10);
|
|
/* 创建成功则启动线程 */
|
|
if (thread != RT_NULL)
|
|
{
|
|
rt_thread_startup(thread);
|
|
}
|
|
else
|
|
{
|
|
LOG_E("failed to create 'updateLogName'");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 更新debug日志的文件名
|
|
*/
|
|
void updateDebuglogName(void)
|
|
{
|
|
// rt_mutex_release(updateLogName);
|
|
isToUpdate = 1;
|
|
}
|
|
|
|
//MSH_CMD_EXPORT(updateDebuglogName,更新debug日志的文件名);
|
|
MSH_CMD_EXPORT(initLogFileBackend,initLogFileBackend);
|
|
INIT_APP_EXPORT(initLogFileBackend);
|