错误日志的添加,每个日志的大小为1M,循环30次。
2017-08-30 19:59
183 查看
//定义
const DWORD g_errlog_file_size = 1024*1024;//1M
const DWORD g_errlog_file_num = 30;//file num
DWORD current_file_num = 1;
DWORD g_current_log_size = 0;
FILE *g_errlog_file = NULL;
void errlog_open(DWORD num,BOOL bStartOpen = FALSE);
void errlog_write(char *str, int ilen);
void errlog_close();
//index logfile 日志索引文件,当有系统退出时,下一次启动的起点。。
FILE *g_err_index_log_file = NULL;
void index_log_open(int type);
void index_log_write(DWORD num);
DWORD index_log_read();
void index_log_close();
void errlog_open(DWORD errlog_num, BOOL bStartOpen)
{
char chPath[DCF_DIR_FPLEN_MAX] = { 0 };
if (!chPath[0])
{
char temp[16];
sprintf_s(temp, 16, "err_log_%d.log",errlog_num);
dcf_dir_get_filepath(DIR_LOG, chPath,temp);
}
if (g_errlog_file)
{
fclose(g_errlog_file);
g_errlog_file = NULL;
}
if (bStartOpen)
{
g_errlog_file = fopen(chPath, "ab+");
if (fseek(g_errlog_file, 0, SEEK_END) == 0)
{
g_current_log_size = ftell(g_errlog_file);
if (g_current_log_size < 0)
{
g_current_log_size = 0;
}
}
}
else
{
g_errlog_file = fopen(chPath, "wb");
}
//覆盖写索引到index_log
dcf_err_index_log_open(2);
dcf_err_index_log_write(errlog_num);
dcf_err_index_log_close();
}
void errlog_write(char *str, int ilen) //外部调用接口
{
if ((!g_errlog_file) || (!(*str)) || (ilen <= 0))
{
return;
}
g_current_log_size += ilen;
if (g_current_log_size > g_errlog_file_size)
{
current_file_num++;
if (current_file_num > g_errlog_file_num)
{
current_file_num %= g_errlog_file_num;
}
//关掉之前的文件
errlog_close();
errlog_open(current_file_num);
g_current_log_size = 0;
}
fwrite(str, 1, ilen, g_errlog_file);
fflush(g_errlog_file);
}
void errlog_close()
{
if (!g_errlog_file)
{
return;
}
fclose(g_errlog_file);
g_errlog_file = NULL;
}
//1 readonly ; 2 write only
void dcf_err_index_log_open(int type)
{
char chPath[DCF_DIR_FPLEN_MAX] = { 0 };
dcf_dir_get_filepath(DIR_LOG, chPath, "err_log_index.txt");
if (g_err_index_log_file)
{
fclose(g_err_index_log_file);
g_err_index_log_file = NULL;
}
if (type == 1)
{
g_err_index_log_file = fopen(chPath, "rb");
}
else if (type == 2)
{
g_err_index_log_file = fopen(chPath, "wb");
}
}
void index_log_write(DWORD num)
{
ASSERT((num >= 1) && (num <= g_errlog_file_num));
if (!g_err_index_log_file)
{
return;
}
char str_index[4];
int ilen = sprintf_s(str_index, sizeof(str_index), "%d", num);
fwrite(str_index, 1, ilen, g_err_index_log_file);
fflush(g_err_index_log_file);
}
DWORD index_log_read()
{
if ((!g_err_index_log_file)) return 1;
char str_index[4] = {0};
size_t a = fread(str_index, sizeof(str_index), 1, g_err_index_log_file);
int idx = atoi(str_index);
if ((idx < 1) || (idx > g_errlog_file_num))
{
idx = 1;
}
return idx;
}
void index_log_close()
{
if (!g_err_index_log_file)
{
return;
}
fclose(g_err_index_log_file);
g_err_index_log_file = NULL;
}
//初始化接口
err_index_log_open(1);
current_file_num = dcf_err_index_log_read();
errlog_open(current_file_num,TRUE);
err_index_log_open(2);
已经试用,东西比较简单,没有做成大型的日志。。
const DWORD g_errlog_file_size = 1024*1024;//1M
const DWORD g_errlog_file_num = 30;//file num
DWORD current_file_num = 1;
DWORD g_current_log_size = 0;
FILE *g_errlog_file = NULL;
void errlog_open(DWORD num,BOOL bStartOpen = FALSE);
void errlog_write(char *str, int ilen);
void errlog_close();
//index logfile 日志索引文件,当有系统退出时,下一次启动的起点。。
FILE *g_err_index_log_file = NULL;
void index_log_open(int type);
void index_log_write(DWORD num);
DWORD index_log_read();
void index_log_close();
void errlog_open(DWORD errlog_num, BOOL bStartOpen)
{
char chPath[DCF_DIR_FPLEN_MAX] = { 0 };
if (!chPath[0])
{
char temp[16];
sprintf_s(temp, 16, "err_log_%d.log",errlog_num);
dcf_dir_get_filepath(DIR_LOG, chPath,temp);
}
if (g_errlog_file)
{
fclose(g_errlog_file);
g_errlog_file = NULL;
}
if (bStartOpen)
{
g_errlog_file = fopen(chPath, "ab+");
if (fseek(g_errlog_file, 0, SEEK_END) == 0)
{
g_current_log_size = ftell(g_errlog_file);
if (g_current_log_size < 0)
{
g_current_log_size = 0;
}
}
}
else
{
g_errlog_file = fopen(chPath, "wb");
}
//覆盖写索引到index_log
dcf_err_index_log_open(2);
dcf_err_index_log_write(errlog_num);
dcf_err_index_log_close();
}
void errlog_write(char *str, int ilen) //外部调用接口
{
if ((!g_errlog_file) || (!(*str)) || (ilen <= 0))
{
return;
}
g_current_log_size += ilen;
if (g_current_log_size > g_errlog_file_size)
{
current_file_num++;
if (current_file_num > g_errlog_file_num)
{
current_file_num %= g_errlog_file_num;
}
//关掉之前的文件
errlog_close();
errlog_open(current_file_num);
g_current_log_size = 0;
}
fwrite(str, 1, ilen, g_errlog_file);
fflush(g_errlog_file);
}
void errlog_close()
{
if (!g_errlog_file)
{
return;
}
fclose(g_errlog_file);
g_errlog_file = NULL;
}
//1 readonly ; 2 write only
void dcf_err_index_log_open(int type)
{
char chPath[DCF_DIR_FPLEN_MAX] = { 0 };
dcf_dir_get_filepath(DIR_LOG, chPath, "err_log_index.txt");
if (g_err_index_log_file)
{
fclose(g_err_index_log_file);
g_err_index_log_file = NULL;
}
if (type == 1)
{
g_err_index_log_file = fopen(chPath, "rb");
}
else if (type == 2)
{
g_err_index_log_file = fopen(chPath, "wb");
}
}
void index_log_write(DWORD num)
{
ASSERT((num >= 1) && (num <= g_errlog_file_num));
if (!g_err_index_log_file)
{
return;
}
char str_index[4];
int ilen = sprintf_s(str_index, sizeof(str_index), "%d", num);
fwrite(str_index, 1, ilen, g_err_index_log_file);
fflush(g_err_index_log_file);
}
DWORD index_log_read()
{
if ((!g_err_index_log_file)) return 1;
char str_index[4] = {0};
size_t a = fread(str_index, sizeof(str_index), 1, g_err_index_log_file);
int idx = atoi(str_index);
if ((idx < 1) || (idx > g_errlog_file_num))
{
idx = 1;
}
return idx;
}
void index_log_close()
{
if (!g_err_index_log_file)
{
return;
}
fclose(g_err_index_log_file);
g_err_index_log_file = NULL;
}
//初始化接口
err_index_log_open(1);
current_file_num = dcf_err_index_log_read();
errlog_open(current_file_num,TRUE);
err_index_log_open(2);
已经试用,东西比较简单,没有做成大型的日志。。
相关文章推荐
- 由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端,或打开对每个 Microsoft .NET Framework SDK 文档的跟踪并检查服务器跟踪日志。
- 更改日志大小及添加日志组成员
- SharePoint上传循环添加label并获取上传文件名字的扩展名和文件大小(Session["demo"] = new List<Label>();方法实现)
- vue 里面通过v-for循环出来多个相同样式的div,根据index值给每个div添加不同的id名
- 使用sp_cycle_errorlog循环SQL Server错误日志
- 创建错误日志循环
- 2017.8.22学习日志——php添加datepicker并对比大小
- matlab subplot 在循环中,为每个子图添加与循环变量有关的title。
- 使用sp_cycle_errorlog循环SQL Server错误日志
- Oracle 11g RAC 添加删除日志组(修改日志组大小)
- ubuntu安装Android开发环境配置exit code = 13错误安装中文输入法及调整屏幕大小及添加快捷键到右边栏
- JBOSS 7 日志 按日期 按大小 循环 输出
- Java项目添加log4j日志文件错误记录
- 循环添加label并获取上传文件名字的扩展名和文件大小
- C#中使用日志类,添加dll时出现错误
- SVN强制添加日志出现E205000错误解决方法
- 查询日志连续错误30次的就自动封掉这个IP
- ★实验 8-2 1. 创建两个守候进程。每个守候进程各自创建独立的日志文件。 2. 每隔 1s 向日志文件中写入如下信息: a) 守候进程 1:未使用的内存大小(MemFree) b) 守
- Log4 添加错误日志
- T-SQL语句循环批量添加登录用户和数据库用户并自动创建架构,为每个用户添加Create table权限