VC++使用fprintf函数实现写日志文件的功能(附源码)
Posted dvlinker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC++使用fprintf函数实现写日志文件的功能(附源码)相关的知识,希望对你有一定的参考价值。
输出打印日志是排查软件异常问题一个非常重要的手段,无论是业务上的异常,还是软件异常崩溃。一个成熟的软件产品,必然有一个功能完备的日志记录与打印系统。本文就来介绍一种简单易用的写日志文件的方法,给大家提供一个参考。
1、实现思路
主要使用C库中的fopen、fprintf和fclose等接口来实现。具体地是,先调用fopen打开或创建日志文件,然后调用fprintf将要记录的日志写到文件中,最后调用fclose将文件关闭掉。
2、支持ANSI窄字节字符串的WriteLog实现
fprintf接口支持的是ANSI窄字节字符串,封装接口如下:
int WriteLog( char* lpszContent )
if ( lpszContent == NULL )
return 0;
char* lpszPath = "D:\\\\0319.log";
FILE* pFile = _tfopen( lpszPath, _T("a+") );
if( NULL == pFile )
return 0;
// 获取系统当前时间
SYSTEMTIME time;
::GetLocalTime( &time );
fprintf( pFile, "%04d-%02d-%02d %02d:%02d:%02d:%03d %s\\n", time.wYear, time.wMonth,
time.wDay, time.wHour, time.wMinute, time.wSecond, time.wMilliseconds, lpszContent );
fclose( pFile );
return 1;
3、支持Unicode字符串的WriteLog接口实现
现在的Windows软件产品一般都需要支持多国语言,所以都要支持全球Unicode统一编码的字符串,所以我们也要提供支持Unicode编码字符串的写日志接口。
我们要使用Unicode版本的_tfopen、_ftprintf等接口去操作日志文件,日志文件中存放的字符也是Unicode字符。如果文件使用Unicode编码,则需要在打开时使用“ab+”模式(二进制模式),并且要写入Unicode编码头:0xff、0xfe。
支持Unicode编码字符串的WriteLog接口实现如下:
int WriteLog( CString strLog )
CString strFilePath = _T("D:\\\\0328.log");
BOOL bFileExsit = PathFileExists( strFilePath );
LPCTSTR pszMode = NULL;
#ifdef _UNICODE
pszMode = _T("ab+"); // 对于Unicode,要向文件中写入Unicode文字,必须以二进制方式打开
#else
pszMode = _T("a+");
#endif
FILE* pFile = NULL;
int err = _tfopen_s( &pFile, strFilePath, pszMode );
if( ERROR_SUCCESS != err )
return 0;
#ifdef _UNICODE
if ( !bFileExsit )
// 新创建的日志文件,则写入Unicode头
BYTE chUnicodeHead[2] = 0xff, 0xfe ; // Unicode头
fwrite( chUnicodeHead, sizeof(BYTE), sizeof(chUnicodeHead), pFile );
#endif
_ftprintf( pFile, _T("%s"), (LPCTSTR)strLog );
fclose( pFile );
return 1;
以上是关于VC++使用fprintf函数实现写日志文件的功能(附源码)的主要内容,如果未能解决你的问题,请参考以下文章
VC++获取文件的修改时间,定期清理若干天之前的日志文件(附源码)