log4z 多线程下日志分流 使用范例
来源:互联网 发布:apache是什么 编辑:程序博客网 时间:2024/04/28 18:31
主函数代码:
第6行: 对主日志记录器(默认的日志记录器)进行自定义配置.
第7,8,9行: 动态创建日志记录器(在代码中直接创建).
第12,13行: 首先加载配置文件, 然后根据配置文件中的name获取LoggerId
第16行: 启动log4z.
第19,20,21行: 创建线程分别对不同的日志记录器记录不同的日志. 另外说明一下 所有日志接口都是线程安全的, 对一个LoggerId可以同时在不同线程进行使用.
int main(int argc, char *argv[]){ //add and configure logger ILog4zManager::GetInstance()->ConfigMainLogger("", "L_MAIN"); g_logger[L_MAIN] = ILog4zManager::GetInstance()->GetMainLogger(); g_logger[L_MYSQL] = ILog4zManager::GetInstance()->DynamicCreateLogger("", "L_MYSQL"); g_logger[L_NET] = ILog4zManager::GetInstance()->DynamicCreateLogger("", "L_NET"); ILog4zManager::GetInstance()->ConfigFromFile("config.xml"); g_logger[L_MONITER] = ILog4zManager::GetInstance()->GetLoggerFromName("L_MONITER"); //start log4z ILog4zManager::GetInstance()->Start(); //create thread, it create the virtual module . CreateThread(&MysqlModuleTrace); CreateThread(&NetworkModuleTrace); CreateThread(&MoniterModuleTrace); //virtual the main logic in project. while(1) { LOGI("main thread trace msg ..."); SleepMillisecond(rand()%3000); } printf("press anykey to exit."); getchar(); return 0;}
配置文件参考:
<!--at current version, configure can't support xml Comments.--><!--logger id must in the region [0,LOGGER_MAX) --><logger> <path>./log/</path> <!--#path--> <name>L_MONITER</name> <!--#name--> <level>0</level> <!--#DEBUG WARN ERROR ALARM FATAL--> <display>1</display> <!--#display to screent--></logger>
生成结果的图片和日志文件 可参考源代码doc目录下的word说明文档.
完整代码如下:
#include "../log4z.h"#include <iostream>#include <stdio.h> #if WIN32#include <Windows.h>#include <process.h>#else#include <pthread.h>#include <stdlib.h>#endifusing namespace zsummer::log4z; //cross platform function://sleep in linux or windowsvoid SleepMillisecond(unsigned int ms);//create thread in linux or windowsbool CreateThread(void(*run)()); //enum multi loggerenum ENUM_LOGGER{ L_MAIN=0, //the main logger, It away exist. L_MYSQL, //the user-defined logger. L_NET, //the user-defined logger. L_MONITER, //the user-defined logger.}; LoggerId g_logger[L_MONITER+1]; //virtual the mysql module in a project.void MysqlModuleTrace(){ while(1) { LOG_DEBUG(g_logger[L_MYSQL], "mysql trace some msg ..."); LOG_DEBUG(g_logger[L_MYSQL], "mysql trace some msg ..."); if (rand()%100 <2) { LOG_FATAL(g_logger[L_MYSQL], "mysql some time put the fatal msg ..."); } if (rand()%100 <5) { LOG_ERROR(g_logger[L_MYSQL], "mysql some time put the error msg ..."); } SleepMillisecond(rand()%30); }}//virtual the Network module in a project.void NetworkModuleTrace(){ while(1) { LOG_DEBUG(g_logger[L_NET], "network trace some msg ..."); LOG_DEBUG(g_logger[L_NET], "network trace some msg ..."); if (rand()%100 <2) { LOG_FATAL(g_logger[L_NET], "network some time put the fatal msg ..."); } if (rand()%100 <5) { LOG_ERROR(g_logger[L_NET], "network some time put the error msg ..."); } SleepMillisecond(rand()%30); }}//virtual the Moniter module in a project.void MoniterModuleTrace(){ while(1) { LOG_DEBUG(g_logger[L_MONITER], "network trace some msg ..."); LOG_DEBUG(g_logger[L_MONITER], "network trace some msg ..."); if (rand()%100 <2) { LOG_WARN(g_logger[L_MONITER], "network some time put the warning msg ..."); } if (rand()%100 <5) { LOG_ALARM(g_logger[L_MONITER], "network some time put the alarm msg ..."); } SleepMillisecond(rand()%30); }}////////////////////////////////////////////////////////////////////////// int main(int argc, char *argv[]){ //add and configure logger ILog4zManager::GetInstance()->ConfigMainLogger("", "L_MAIN"); g_logger[L_MAIN] = ILog4zManager::GetInstance()->GetMainLogger(); g_logger[L_MYSQL] = ILog4zManager::GetInstance()->DynamicCreateLogger("", "L_MYSQL"); g_logger[L_NET] = ILog4zManager::GetInstance()->DynamicCreateLogger("", "L_NET"); ILog4zManager::GetInstance()->ConfigFromFile("config.xml"); g_logger[L_MONITER] = ILog4zManager::GetInstance()->GetLoggerFromName("L_MONITER"); //start log4z ILog4zManager::GetInstance()->Start(); //create thread, it create the virtual module . CreateThread(&MysqlModuleTrace); CreateThread(&NetworkModuleTrace); CreateThread(&MoniterModuleTrace); //virtual the main logic in project. while(1) { LOGI("main thread trace msg ..."); SleepMillisecond(rand()%3000); } printf("press anykey to exit."); getchar(); return 0;} //////////////////////////////////////////////////////////////////////////void SleepMillisecond(unsigned int ms){#ifdef WIN32 ::Sleep(ms);#else usleep(1000*ms);#endif} //#ifdef WIN32 static unsigned int WINAPI ThreadProc(LPVOID lpParam){ ((void(*)())(lpParam))(); _endthreadex(0); return 0;}#elsestatic void * ThreadProc(void * pParam){ ((void(*)())(pParam))(); return NULL;}#endif bool CreateThread(void(*run)()){#ifdef WIN32 unsigned long long ret = _beginthreadex(NULL, 0, ThreadProc,(void*) run, 0, NULL); if (ret == -1 || ret == 1 || ret == 0) { return false; }#else pthread_t ptid = 0; int ret = pthread_create(&ptid, NULL, ThreadProc, (void*)run); if (ret != 0) { return false; }#endif return true;}
- log4z 多线程下日志分流 使用范例
- log4z 快速使用教程
- log4z 快速使用教程
- log4z 快速使用教程
- log4z 很好日志处理类,收藏一下
- 跨平台的C++ 日志记录库 log4z 简介
- 多线程下写日志
- 多线程同步锁的使用范例
- 巧妙使用ADSL分流技术
- 开发过程中的日志分流保存
- Windows 下 C/C++ 多线程编程入门参考范例
- Windows 下 C/C++ 多线程编程入门参考范例
- Ubuntu下配置VPN,实现VPN分流
- log4z v2.4 一款轻量级的跨平台C++ 日志记录库
- 写日志范例
- Logminer日志挖掘范例
- ice 多线程同步范例
- ice 多线程同步范例
- 12款免费素材图标系列二
- Activity的一些FLAG,标志,加载模式
- Oracle11新特性——虚拟列
- [推荐]超级学习法:如何在三个月内获得三年的工作经验
- 使用Java原生API编写发送HTTP_POST请求的工具类
- log4z 多线程下日志分流 使用范例
- 双端队列(deque)链表实现
- Android init.rc文件浅析
- 网上所述的va_list
- A Simple Scene Animated with CSS3
- ReceiveEmailUtil工具类及应用
- Android Jni调用浅述
- java运用jni调用dll实现屏蔽系统热键和任务栏
- JAVA集合之SET