c++ 日志 接口 等级

你是否为代码没有注释而苦恼,你是否为BUG没有日志而伤心,是否无缘升职加薪,是否测试部的小妹妹周末陪了美工.....

4.请在.h头文件领取新手礼物

#define    FATAL_LOG  0x0000

#define    ERROR_LOG  0x0001

#define    TRACE_LOG  0x0010

#define    INFOR_LOG  0x0100

#define    DEBUG_LOG  0x1000

#define MAX_NAME (256)

#define LOGSYNCTIME (1000)

void SaveLog(char *funName, int returnValue, char *Msg);

void setTraceLevel(int type);

void log_data(char* fname,char* errmsg,char *errvalue);

void log_fatal(char* fname,char* errmsg,char * format,...);

void log_error(char* fname,char* errmsg,char * format,...);

void log_infor(char* fname,char* errmsg,char * format,...);

void log_trace(char* fname,char* errmsg,char * format,...);

void log_debug(char* fname,char* errmsg,char * format,...);

3..cpp 配置天赋符文

long m_tracelevel = INFOR_LOG | ERROR_LOG;

#define DATAMAXLEN 10240

#define FUNMAXLEN  256

2.技能天赋介绍

----很好,现在请点击1级技能加点

被动技能 程序猿可投出infor,error,debug,trace4种香蕉造成成吨伤害,等效于1斤狗粮

void setTraceLevel(int type)

{

m_tracelevel = type;

m_tracelevel |= (INFOR_LOG | ERROR_LOG);

}

D技能:吸收函数名,函数返回值,伤害来源数据 并回馈到本地.\driver\log年月日.txt

void SaveLog(char *funName, int returnValue, char *Msg)

{

char sFileName[FUNMAXLEN];

char sLog[DATAMAXLEN + FUNMAXLEN*2];

SYSTEMTIME CurTime;

GetLocalTime(&CurTime);

_mkdir(".\\driver");

sprintf(sFileName,".\\driver\\log%04d%02d%02d.txt",CurTime.wYear,CurTime.wMonth,CurTime.wDay,CurTime.wHour);

sprintf(sLog,"[%4d-%02d-%02d %02d:%02d:%02d:%003d][funName:%s][ret:%d][msg:%s]",

CurTime.wYear,CurTime.wMonth,CurTime.wDay,CurTime.wHour,CurTime.wMinute,CurTime.wSecond,CurTime.wMilliseconds,funName,returnValue,Msg);

fstream f;

f.open(sFileName, ios::app);

if(f.good())

{

f<<sLog<<endl;

f.close();

}

}

F技能:吸收函数名fname,敌方英雄文件名errmsg,伤害数据errvalue对本地.\driver\log年月日.txt造成成吨的文字伤害

void log_data(char* fname,char* errmsg,char *errvalue)

{

char sFileName[FUNMAXLEN];

char sLog[DATAMAXLEN + FUNMAXLEN*2];

SYSTEMTIME CurTime;

GetLocalTime(&CurTime);

_mkdir(".\\driver");

sprintf(sFileName,".\\driver\\log%04d%02d%02d.txt",CurTime.wYear,CurTime.wMonth,CurTime.wDay,CurTime.wHour);

sprintf(sLog,"[%4d-%02d-%02d %02d:%02d:%02d:%003d][%s][%s][%s]",

CurTime.wYear,CurTime.wMonth,CurTime.wDay,CurTime.wHour,CurTime.wMinute,CurTime.wSecond,CurTime.wMilliseconds,fname,errmsg,errvalue);

fstream f;

f.open(sFileName, ios::app);

if(f.good())

{

f<<sLog<<endl;

f.close();

}

}

Q技能:仍出infor香蕉在函数入参和出参造成伤害

吸收函数名fname,敌方英雄文件名errmsg,伤害数据字符串格式format

void log_infor(char* fname,char* errmsg,char *format,...)

{

if(m_tracelevel & INFOR_LOG)

{

char tmpbuf[FUNMAXLEN];

char errvalue[DATAMAXLEN + FUNMAXLEN*2];

sprintf(tmpbuf,"infor in %s",fname);

memset(errvalue,0x0,sizeof(errvalue));

va_list ap;

va_start(ap,format);

_vsnprintf(errvalue,DATAMAXLEN - 1,format,ap);

va_end(ap);

log_data(tmpbuf,errmsg,errvalue);

}

}

W技能:仍出error香蕉在函数有断言式错误提醒对方,我方已挂机

吸收函数名fname,敌方英雄文件名errmsg,伤害数据字符串格式format

void log_error(char* fname,char* errmsg,char *format,...)

{

if(m_tracelevel & ERROR_LOG)

{

char tmpbuf[FUNMAXLEN];

char errvalue[DATAMAXLEN + FUNMAXLEN*2];

sprintf(tmpbuf,"error in %s",fname);

memset(errvalue,0x0,sizeof(errvalue));

va_list ap;

va_start(ap,format);

_vsnprintf(errvalue,DATAMAXLEN - 1,format,ap);

va_end(ap);

log_data(tmpbuf,errmsg,errvalue);

}

}

E技能:仍出debug香蕉在函数在需要调试的地方,标记敌方英雄

吸收函数名fname,敌方英雄文件名errmsg,伤害数据字符串格式format

void log_debug(char* fname,char* errmsg,char *format,...)

{

if(m_tracelevel & ERROR_LOG)

{

char tmpbuf[FUNMAXLEN];

char errvalue[DATAMAXLEN + FUNMAXLEN*2];

sprintf(tmpbuf,"error in %s",fname);

memset(errvalue,0x0,sizeof(errvalue));

va_list ap;

va_start(ap,format);

_vsnprintf(errvalue,DATAMAXLEN - 1,format,ap);

va_end(ap);

log_data(tmpbuf,errmsg,errvalue);

}

}

R技能:仍出trace香蕉在函数在需要调试的地方,提醒打野,中miss,上miss,下miss,打野gank

吸收函数名fname,敌方英雄文件名errmsg,伤害数据字符串格式format

void log_trace(char* fname,char* errmsg,char *format,...)

{

if(m_tracelevel & ERROR_LOG)

{

char tmpbuf[FUNMAXLEN];

char errvalue[DATAMAXLEN + FUNMAXLEN*2];

sprintf(tmpbuf,"error in %s",fname);

memset(errvalue,0x0,sizeof(errvalue));

va_list ap;

va_start(ap,format);

_vsnprintf(errvalue,DATAMAXLEN - 1,format,ap);

va_end(ap);

log_data(tmpbuf,errmsg,errvalue);

}

}

(小键盘1)嗑药fatal,一直没用过就是懒不想删。点燃磕个药闭眼等回家.....

void log_fatal(char* fname,char* errmsg,char *format,...)

{

char tmpbuf[FUNMAXLEN];

char errvalue[DATAMAXLEN + FUNMAXLEN*2];

sprintf(tmpbuf,"fatal error in %s",fname);

memset(errvalue,0x0,sizeof(errvalue));

va_list ap;

va_start(ap,format);

_vsnprintf(errvalue,DATAMAXLEN - 1,format,ap);

va_end(ap);

log_data(tmpbuf,errmsg,errvalue);

}

---------------------------------------------------------------------------------------

时间: 2024-10-07 05:07:01

c++ 日志 接口 等级的相关文章

(C#)日志接口请求响应时间

日志接口响应时间,记录接口请求信息,响应结果以及响应时间等.可以清楚的分析和了解接口现在. 如果一个一个地在接口下面做日志,那不是我们想要的结果.所以,我们选择做一个特性来控制接口要不要记录请求响应日志. 关键代码如下: public class LogRequestAndResponseAttribute: ActionFilterAttribute { private static string RequestLogSwitch = string.IsNullOrEmpty(Configur

logger日志接口SLF4J

SLF4J只是一个接口,可以实现程序的解藕.SLF4J可以与log4j.logback.jdk等日志系统结合,以及在这些日志系统之间切换. 使用maven导入各个日志系统的jar包.需要注意的是要写相应的输出格式和级别配置,比如log4j的log4j.properties,对于另外两个不写使用默认的也行. <!-- 使用log4j作日志 --> <dependency> <groupId>org.slf4j</groupId> <artifactId&

小蚂蚁学习APP接口开发(完结)—— APP错误日志接口开发

APP有可能面临的错误问题: 1.    APP强退    2.    数据加载失败    3.    APP潜在问题  等等 错误日志表,用于记录发送过来的错误信息 CREATE TABLE IF NOT EXISTS `error_log` (   `id` mediumint(9) NOT NULL AUTO_INCREMENT COMMENT '主键',   `app_id` tinyint(4) NOT NULL COMMENT '客户端设备id',   `did` varchar(5

rocketmq4.4配置日志路径等级

公司使用了最新的rocketmq框架,然后2天日志跑了快2个g.... 无奈网上只有4.2的教程...只好自己研究 环境rocketmq4.4 springboot 看源码找到配置日志等级和路径的地方(4.4和4.2是有区别的!) 可以看出是读取系统参数,所以,只要在启动的时候设置即可(在spingboot中配置无效) -Drocketmq.client.logRoot=E:\logs -Drocketmq.client.logLevel=ERROR 服务器看环境配置,就是修改tomcat的jv

PHP 开发 APP 接口--错误日志接口

APP 上线以后可能遇到的问题: ① APP 强退 ② 数据加载失败 ③ APP 潜在问题 错误日志需要记录的内容 数据表 error_log 字段: id app_id:app 类别 id did:客户端设备号 version_id:版本号 version_mini:小版本号 error_log:错误信息(由 APP 返回,客户端开发工程师开发) error.php 处理 app 错误日志 <?php require_once('./common.php'); class ErrorLog e

python接口自动化(三十九)- logger 日志 - 上(超详解)

简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式. logging模块与log4j的机制是一样的,只是具体的实现细节不同.模块提供logger,handler,filter,formatter. logger提供日志接口,供应用代码使用.logger最长用的操作有两类:配置和发送日志消息.可以通过

根据需要分等级的打印日志(C语言)

在程序遇到问题调试时,有时候需要打印一些中间变量,观察完调试完又需要把这些打印注释掉,感觉很麻烦.所以写了一个小程序,可以设置打印日志等级. 在主程序设置要打印的日志等级debug,就把相应的等级的日志全部打出来观察. 程序用到了va_list(在C语言中解决变参问题的一组宏),相关知识可参考http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html(注意链接文章正确的程序在评论中) . 直接上主程序:main.cpp 1 #

spring问题排查-调低日志等级

问题描述 1. 页面经过一次修改后,提交后页面出现400错误,但是后台并没有输出任何错误信息. 2. debug监听应页面相应的提交链接也没有任何反应(没有进入后台的controller方法中). 3. 在浏览器刷新提交链接可进入后台方法(Debug可以监听到) 解决方法: 1. 通过问题中的第3条可以看出肯定是页面中的内容,应该是参数的问题导致无法提交的. 2. 但是通过页面进行排查的难度也非常大,看了20分钟也看不出有什么异常. 3. 看了一些文章收到启发,想试一下通过降低log的等级,查看

架构设计 - 日志管理接口设计

在后端代码中,日志无处不在,自己设计自己的一套日志管理代码,提供一套好用的日志接口将大大方便代码的开发. 其中在日志管理代码的编写中,主要有以下难点: 1.数目不确定的入参函数编写 2.日志权限控制 3.日志输出形式. 接口设计: 1.提供三类日志打印形式:1)控制台打印信息,类似printf的接口封装 2)函数追踪接口,打印当前代码的文件名,函数名及行,以及一些设定的输出参数 3)日志打印函数,提供打印级别控制,且打印内容输出到日志文件中 2.提供日志级别控制:1)在打印日志时提供当前日志级别