linux 写一个日志函数,嵌入式linux 打印调试log封装函数

#include /*syslog 等级

* LOG_EMERG 0 紧急状态

* LOG_ALERT 1 必须立即修复状态

* LOG_CRIT 2 严重状态

* LOG_ERR 3 出错状态

* LOG_WARNING 4 警告状态

* LOG_NOTICE 5 正常,但重要的状态

* LOG_INFO 6 信息性消息

* LOG_DEBUG 7 调试消息

*/

// 主要是因为使用到了 vprintf 、vfprintf、vsyslog等函数,在x86的ubuntu14.04中,不能连续使用,需要拷贝一份 va_list 参数

// vfprintf 连续使用时,需要复制一份, 本文主要是 vprintf、vfprintf的连续使用

// 参见 :https://bbs.csdn.net/topics/390841785 中2楼所说 ,感谢 alofm 博主

// 本人使用的嵌入式平台是 TI-am3354

#define x86 1

#define PROGRAM "[process name] "

void my_syslog(unsigned int lev,const char *msg,...);

#define mypfdbg

#ifdef mypfdbg

#define my_debug(format,...) my_syslog(LOG_DEBUG, PROGRAM "[%s:%d] " format,__FILE__,__LINE__,##__VA_ARGS__)

#else

#define my_debug(format,...)

#endif

#define my_info(format,...) my_syslog(LOG_INFO, PROGRAM "[%s:%d] " format,__FILE__,__LINE__,##__VA_ARGS__)

#define my_err(format,...) my_syslog(LOG_ERR, PROGRAM "[%s:%d] " format,__FILE__,__LINE__,##__VA_ARGS__)

unsigned char flag_pf = 1; //程序是否前台运行的标记,通过命令行传入参数确地是否前台运行,并修改

unsigned char dbg_lev = 7; //syslog的打印级别,通过命令行传入参数修改

FILE *fp = NULL;

int init_file_point(void)

{

if(NULL==fp)

fp = fopen("/home/mydir/test.log","a+");

if(NULL!=fp)

return 0;

else

return -1;

}

// 添加时间标记前缀

static void add_time_tag(char *dst,int bufsize,const char *format,...)

{

time_t now;

time(&now);

struct tm *local;

local = localtime(&now);

strftime(dst,bufsize,"%m-%d %T ",local);

strcat(dst,format);

}

void my_syslog(unsigned int lev,const char *msg,...)

{

int len = 0,mal_flag = 0, bufsize = 0;

char *ptr = NULL;

char buf[512] = {0};

if(lev<=dbg_lev) //默认的打印等级

{

va_list ap;

openlog("tag",LOG_PID,LOG_USER);

va_start(ap,msg);

if( (flag_pf) || (lev==LOG_ERR) )

{

len = strlen(msg);

if(len 再次感谢谢谢 Z_Dream_ST 、alofm两位博主!!! 其中有些异常没有考虑,仅示例基本功能,如有考虑不周的地方,还望指正。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值