网是开源的c/c++日志库也不少,但用起来总觉得不方便,于是动手写了一个C++日志框架Log4K。

测试代码:

#include "log4k.h"

#pragma comment(lib, "log4k.lib")

static int g_Cnt = ;
void LogTestThread1(LPVOID lpPara)
{
DEBUG_FUNCTION(); LOGFMTT(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTD(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTI(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTW(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTE(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__); for (int i = ; i < ;)
{
LOGFMTT(L"[%d] %s", i++, __FUNCTIONW__);
//Sleep(10);
}
} void LogTestThread2(LPVOID lpPara)
{
DEBUG_FUNCTION(); LOGFMTT_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);
LOGFMTD(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTI_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);
LOGFMTW(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTE_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__); for (int i = ; i < ;)
{
LOGFMTI(L"[%d] %s", i++, __FUNCTIONW__);
//Sleep(10);
}
} int main()
{
DEBUG_FUNCTION(); LOG4K_SET_OUT(Kevin55::OUT_TO_STDOUT_AND_LOG);
LOGFMTT(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTD(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTI(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTW(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTE(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__); LOGFMTT_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);
LOGFMTD_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);
LOGFMTI_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);
LOGFMTW_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);
LOGFMTE_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__); HANDLE hThread[];
ZeroMemory(hThread, sizeof(HANDLE) * ); hThread[] = CreateThread(NULL, , (LPTHREAD_START_ROUTINE)LogTestThread1, NULL, , NULL);
hThread[] = CreateThread(NULL, , (LPTHREAD_START_ROUTINE)LogTestThread2, NULL, , NULL); for (int i = ; i < ; i++)
{
LOGFMTD(L"[%d]======%s", i, __FUNCTIONW__);
} WaitForMultipleObjects(, hThread, true, INFINITE);
//LOG4K_SET_OUT(OUT_TO_STDOUT); LOGFMTT(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTD(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTI(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTW(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
LOGFMTE(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__); return ;
}

使用nmake编译及链接完成后,还有error信息,下面是所有nmake输出:

    cl /c /Zi /W3 /WX- /sdl /O2 /Oi /Oy- /GL /D WIN32 /D NDEBUG /D _CONSOLE /D _LIB /D _UNICODE /D UNICODE /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope   /FoD:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\out\Log4K.obj /FdD:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\out\vc120.pdb /Gd /TP /analyze- /errorReport:prompt D:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\Log4K.cpp
Log4K.cpp
link /ERRORREPORT:PROMPT /OUT:D:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\out\Log4K.exe /INCREMENTAL /NOLOGO /LIBPATH:"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib";"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib" kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /DEBUG /PDB:D:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\out\Log4K.pdp /LTCG /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /IMPLIB:D:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\out\Log4Z.lib /MACHINE:X86 D:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\out\log4k.obj
LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/LTCG' specification
Generating code
Finished generating code
cl Log4K.cpp
Log4K.cpp
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xlocale(337) : warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc
Log4K.cpp(427) : error C2664: 'BOOL SetConsoleTitleA(LPCSTR)' : cannot convert argument 1 from 'const wchar_t [14]' to 'LPCSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Log4K.cpp(513) : error C2664: 'DWORD GetModuleFileNameA(HMODULE,LPSTR,DWORD)' : cannot convert argument 2 from 'wchar_t [128]' to 'LPSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

网上好像有人提交过类似的问题:https://connect.microsoft.com/VisualStudio/feedback/details/808657/vs2013-compiler-fails-on-function-templates-with-c-11-alternate-declaration-syntax,这个问题可能是编译器的一个bug。

新写的c++日志库:log4K的更多相关文章

  1. Go第三方日志库logrus

    日志是程序中必不可少的一个环节,由于Go语言内置的日志库功能比较简洁,我们在实际开发中通常会选择使用第三方的日志库来进行开发.本文介绍了logrus这个日志库的基本使用. logrus介绍 Logru ...

  2. 第三方日志库logrus使用

    日志是程序中必不可少的一个环节,由于Go语言内置的日志库功能比较简洁,我们在实际开发中通常会选择使用第三方的日志库来进行开发.本文介绍了logrus这个日志库的基本使用. logrus介绍 Logru ...

  3. Go语言项目中使用zap日志库(翻译)

    本文先介绍了Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档. 在Go语言项目中使用Uber-go的Zap L ...

  4. Go之第三方日志库logrus使用

    文章引用自 第三方日志库logrus使用 日志是程序中必不可少的一个环节,由于Go语言内置的日志库功能比较简洁,我们在实际开发中通常会选择使用第三方的日志库来进行开发.本文介绍了logrus这个日志库 ...

  5. 从0写一个Golang日志处理包

    WHY 日志概述 日志几乎是每个实际的软件项目从开发到最后实际运行过程中都必不可少的东西.它对于查看代码运行流程,记录发生的事情等方面都是很重要的. 一个好的日志系统应当能准确地记录需要记录的信息,同 ...

  6. golang-Zap和Go Logger日志库

    目录 在Go语言项目中使用Zap日志库 介绍 默认的Go Logger日志库 实现Go Logger 设置Logger 使用Logger Logger的运行 Go Logger的优势和劣势 优势 劣势 ...

  7. Go之Zap日志库集成Gin

    简介 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 1 . 能够将事件记录到文件中,而不是应用程序控制台; 2 . 日志切割-能够根据文件大小.时间或间隔等来切割日志文件; ...

  8. 在Go语言项目中使用Zap日志库

    在Go语言项目中使用Zap日志库 本文先介绍了Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档. 在Go语言项 ...

  9. Go语言系列之自定义实现日志库

    日志库logo gitee地址传送门:https://gitee.com/zhangyafeii/logo 日志库需求分析 1. 支持往不同的地方输出日志 2. 日志分级别 Debug Trace I ...

随机推荐

  1. 2016 Multi-University Training Contest 5 Two

    本文转自:http://blog.csdn.net/queuelovestack/article/details/52096337 题意: 给你两个序列A和B 问两个序列有多少个子序列一样 例如{1, ...

  2. [实变函数]5.2 非负简单函数的 Lebesgue 积分

    1 设        $$\bex        \phi(x)=\sum_{i=1}^j c_i\chi_{E_i}(x),\quad c_i\geq 0,        \eex$$ 其中     ...

  3. mvc无法找到资源

    昨天装了vs2015,但是第二步没有完成.今天急急忙忙的用13打开一个mvc的项目,但是添加的控制器怎么都不能访问. 无法找到资源. 说明: HTTP 404.您正在查找的资源(或者它的一个依赖项)可 ...

  4. 【转】C++ 单例模式

    http://blog.csdn.net/hackbuteer1/article/details/7460019 单例的一般实现比较简单,下面是代码和UML图.由于构造函数是私有的,因此无法通过构造函 ...

  5. 开发工具及服务年度大奖评选 I Bugtags 荣获最具成长潜力奖

    作为全球最大中文 IT 社区和服务平台.中国最大技术管理者平台的 CSDN 在中国北京总部举办了一场 2015 年开发工具及服务年度大奖评选活动,此次活动目的在于推动开发服务及工具质量的提升,提高行业 ...

  6. Java中的观察者模式

    让一个类能够被观察,则该类需要继承java.util.Observable类. 要让一个类成为观察者,则该类需要实现java.util.Observable接口. 让观察者和被观察者建立联系通过Obs ...

  7. 九度OJ1207

    题目给你了一个很大的n,然后让你去计算它的质因数.对N进行开方得到的是一个大约在32000左右的数,我们可以用埃氏筛法进行素数打表.对所有prime[i]<=sqrt(n),分别看prime[i ...

  8. I2C协议(转)

    1.I2C协议   2条双向串行线,一条数据线SDA,一条时钟线SCL.   SDA传输数据是大端传输,每次传输8bit,即一字节.   支持多主控(multimastering),任何时间点只能有一 ...

  9. [kuangbin带你飞]专题十二 基础DP1

            ID Origin Title   167 / 465 Problem A HDU 1024 Max Sum Plus Plus   234 / 372 Problem B HDU 1 ...

  10. ecmall数据字典

    ecm_acategory //文章分类表 字段 类型 Null 默认 注释 cate_id int(10) 否 自增ID号,分类ID号 cate_name varchar(100) 否 分类的名称 ...