qnx log写入文件 简单实现

qnx log写入文件 简单实现

c 复制代码
#ifndef __COMMON_LOG__
#define __COMMON_LOG__

#include "fcntl.h"
#include "pthread.h"
#include "stdarg.h"
#include "unistd.h"
#include <stdio.h>
#include <string.h>

//#define _LOG_FILE_NAME "/tmp/easy.log"
#define _LOG_FILE_NAME "easy.log"

#if defined _LOG_FILE_NAME

void __file_log_com(char *log_str, ...);
#define __file__                                                                                                       \
    ({                                                                                                                 \
        char *_rs = strrchr((char*)__FILE__, '/');                                                                            \
        _rs ? (_rs + 1) : __FILE__;                                                                                    \
    })
#define _COM_FILE_PARSE(lgType, prefix, fmt, args...)                                                                  \
    do {                                                                                                               \
        __file_log_com("[%s][%s:%s:%d][%s]" fmt, lgType, __file__, __func__, __LINE__, prefix, ##args);                \
    } while (0)

#define ts_log_info(dev, fmt, args...) _COM_FILE_PARSE("info", dev, fmt, ##args)
#define ts_log_err(dev, fmt, args...) _COM_FILE_PARSE("error", dev, fmt, ##args)
#define ts_log_warn(dev, fmt, args...) _COM_FILE_PARSE("warning", dev, fmt, ##args)
#define ts_log_dbg(dev, fmt, args...) _COM_FILE_PARSE("debug", dev, fmt, ##args)

#else

#define ts_log_info(dev, fmt, args...) 
#define ts_log_err(dev, fmt, args...)  
#define ts_log_warn(dev, fmt, args...) 
#define ts_log_dbg(dev, fmt, args...)  

#endif

static pthread_mutex_t _log_mutex;
static FILE *_log_fp = NULL;


// qnx 简单log写入文件 实现
void __file_log_com(char *log_str, ...) {
    va_list arg;

    if (NULL != _log_fp) {
        pthread_mutex_lock(&_log_mutex);
        va_start(arg, log_str);
        (void)vfprintf(_log_fp, log_str, arg);
        va_end(arg);
        //(void)fprintf(___fp, " \n");
        //(void)fclose(fp);
        fflush(_log_fp);
        pthread_mutex_unlock(&_log_mutex);
    }
}

void com_file_log_init(char *filename) {
    _log_fp = fopen(filename, "w");
    if (!_log_fp)
        return perror(__func__);

    pthread_mutex_init(&_log_mutex, NULL);
}

int main() {
    printf( "hello\n");
    com_file_log_init(_LOG_FILE_NAME);
    char* dev_name = (char*)"E800";
    ts_log_info(dev_name, "hello world");
    // __file_log_com("%s,%s", dev_name, "e800");
    printf( "finish\n");
    return 0;
}

#endif

运行结果:

hello

finish

写入文件样子:

相关推荐
丰锋ff23 分钟前
基于 Qt 的智慧社区物业管理系统
开发语言·qt
夜不会漫长42 分钟前
C++入门(1)
开发语言·c++·算法
大鹏说大话1 小时前
从爬虫到决策引擎:大数据下自媒体如何用Python挖掘用户痛点
开发语言·爬虫·python
Niuguangshuo1 小时前
silero-vad:超轻量级开源 VAD 实践指南
开发语言·python
哭哭啼1 小时前
JAVA服务问题诊断
java·开发语言·jvm
旖旎夜光2 小时前
LeetCode 852:山脉数组的峰顶索引(二分查找) —— 题解
数据结构·c++·算法·leetcode·二分查找
..Dauntless..2 小时前
【C++】继承——基类和派生类的配合
开发语言·c++·算法
程与留3 小时前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt
CRMEB定制开发3 小时前
2026年最值得推荐的10大开源商城系统盘点
开发语言·人工智能·开源·商城系统·小程序商城
buhuizhiyuci3 小时前
【QT-百日筑基篇】修真世界摸爬滚打多年,终于黄天不负有心人,突破炼器中期——常用控件QWight的属性
开发语言·c++·qt·gui·图形化