jni开发通过搜集在C++中的log输出日志生成可读的.log文件到手机sd中

看到标题,有人会问了。输出log在控制台也可以啊也能看到啊等等这一系列问题,这里我想说的是,那样确实方便查看调试,但想过应用上架后为了统计一些cash日志你怎么办?所以,我们以log文件的方式生成在sd卡,下面代码主要是C++中的,至于生成好了的log文件在java中怎么上传服务器这应该很简单,这步骤就跳过。

首先在头文件中声明:

void Log(LPCTSTR pszFormat, ...);
void LogV(LPCTSTR pszFormat, va_list args);

然后再实现文件cpp中写方法实现:

// 日志函数
void Log(LPCTSTR pszFormat, ...) {
	va_list args;
	va_start(args, pszFormat);
	LogV(pszFormat, args);
	va_end(args);
}

// 日志函数
void LogV(LPCTSTR pszFormat, va_list args) {
	// 日志关闭则不做处理
//	if (!m_bLogEnabled) return;
	// 格式化日志
	char szContent[32*1024] = { 0 };
	vsnprintf(szContent, ASIZE(szContent), pszFormat, args);
	// 输出内容
	char szFile[MAX_PATH * 2] = { "存放的路径"};
	strcat(szFile,"log名称.log");
	FILE* fpFile = fopen(szFile, "ab");
	if (fpFile != NULL) {
		string strContent =szContent;
		fwrite(strContent.c_str(), strContent.length(), 1, fpFile);
		fclose(fpFile);
	}
}

最后调用:

  Log("%s \r\n","我是C底层输出的log日志");

然后打开手机sd卡找到你创建的log名称就可以了。这是博主测试的看下图:



升级改造版本代码如下:

static bool g_bLogEnabled=false;

// 日志函数
void Log(LPCSTR pszFormat, ...) {
    va_list args;
    va_start(args, pszFormat);
    LogV(pszFormat, args);
    va_end(args);
}
// 日志函数
void LogV(LPCSTR pszFormat, va_list args) {
    // 日志关闭则不做处理
    if (!g_bLogEnabled) return;
    // 格式化日志
    string strLogDir=FileUtils::sharedFileUtils()->getWritablePath();
    char szContent[32*1024] = { 0 };
    vsnprintf(szContent, sizeof(szContent)/sizeof(szContent[0]), pszFormat, args);
    // 输出内容
    char szFile[260 * 2] = { 0 };
    strcat(szFile,strLogDir.c_str());
    strcat(szFile,"henry.log");
    FILE* fpFile = fopen(szFile, "ab");
    if (fpFile != NULL) {
        fwrite(szContent, strlen(szContent), 1, fpFile);
        fclose(fpFile);

    }


#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    __android_log_print(ANDROID_LOG_DEBUG,"main",szContent);
#else
    printf("%s",szContent);
#endif

//    __android_log_print(ANDROID_LOG_DEBUG,"main",strLogDir.c_str());

}


#if defined(NDK_BUILD)
	#define LOG	Log
#else
	#define LOG
#endif


这个有个问题就是这句获取地址的代码string strLogDir=FileUtils::sharedFileUtils()->getWritablePath();最后在手机中找不到.log的文件。Android里的读写权限都加了也搜索不到。但网上说要root权限。这个我就没测试。毕竟公司的手机。呵呵。大家如果知道原因可以回复艾特我。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值