介绍一个headonly的log库easylogging++
2015-04-03 10:14
871 查看
因为TX的log要求按照小时滚动,并且按照大小滚动,原来的glog设置完大小后,容量了就不会再写入了,而且按小时滚动也很麻烦,所以就找了找其他的log库。
主要要求简单上手,支持大小和时间滚动,不需要改动太多。
看了之前用过的log4cxx等库,发现编译成静态文件后太大了,我们又必须要求静态,所以就很麻烦。
github上找到了一个easylogging++的库,headonly,只有一个头文件,看起来非常炫酷,决定试一试,结果上手确实很简单,支持配置,配置也很强大
项目地址:https://github.com/easylogging/easyloggingpp
一个简单的使用例子:
C++
#include "boost/filesystem.hpp"
#include "easylog/easylogging++.h"
INITIALIZE_EASYLOGGINGPP
static unsigned int idx = 0;
void rolloutHandler(const char* filename, std::size_t size)
{
std::stringstream stream;
stream << filename << "." << ++idx;
boost::filesystem::rename(filename, stream.str().c_str());
}
int main(int argc, char** argv)
{
el::Loggers::addFlag(el::LoggingFlag::StrictLogFileSizeCheck);
el::Configurations conf("log.conf");
el::Loggers::reconfigureAllLoggers(conf);
el::Helpers::installPreRollOutCallback(rolloutHandler);
for (int i = 0; i < 100000; ++i)
{
LOG(INFO) << "Test==========================================================";
}
el::Helpers::uninstallPreRollOutCallback();
return 0;
}
上面注册过滚动函数后就可以按照大小滚动了,不过注意一定要加上StrictLogFileSizeCheck的flag。
按照小时滚动的我加了一些简单粗暴的代码实现了,就不放出来献丑了,如果大家需要,可以单独找我获取。
其中log.conf是配置文件,大致内容如下:
C++
* GLOBAL:
FORMAT = "[%level | %datetime] | %msg"
ENABLED = true
TO_FILE = true
TO_STANDARD_OUTPUT = true
MILLISECONDS_WIDTH = 3
PERFORMANCE_TRACKING = false
MAX_LOG_FILE_SIZE = 209715200 ## Throw log files away after 2097152 2MB / 209715200 200MB / 4398046511104 1GB
* INFO:
LOG_FLUSH_THRESHOLD = 10
FILENAME = "log/game_server_info_%datetime{%Y%M%d%H}.log"
ENABLED = true
* DEBUG:
FILENAME = "log/game_server_debug_%datetime{%Y%M%d%H}.log"
ENABLED = true
* WARNING:
LOG_FLUSH_THRESHOLD = 0
FILENAME = "log/game_server_warn_%datetime{%Y%M%d%H}.log"
ENABLED = true
* TRACE:
* VERBOSE:
FORMAT = "%level-%vlevel | %datetime{%d/%M/%y} | %msg"
## Error logs
* ERROR:
LOG_FLUSH_THRESHOLD = 0
ENABLED = true
FILENAME = "log/game_server_error_%datetime{%Y%M%d%H}.log"
* FATAL:
LOG_FLUSH_THRESHOLD = 0
ENABLED = true
FILENAME = "log/game_server_fatal_%datetime{%Y%M%d%H}.log"
生成出来的log非常整齐,整体满足了我的需求,而且只有头文件,不需要编译库,实在是方便。
主要要求简单上手,支持大小和时间滚动,不需要改动太多。
看了之前用过的log4cxx等库,发现编译成静态文件后太大了,我们又必须要求静态,所以就很麻烦。
github上找到了一个easylogging++的库,headonly,只有一个头文件,看起来非常炫酷,决定试一试,结果上手确实很简单,支持配置,配置也很强大
项目地址:https://github.com/easylogging/easyloggingpp
一个简单的使用例子:
C++
#include "boost/filesystem.hpp"
#include "easylog/easylogging++.h"
INITIALIZE_EASYLOGGINGPP
static unsigned int idx = 0;
void rolloutHandler(const char* filename, std::size_t size)
{
std::stringstream stream;
stream << filename << "." << ++idx;
boost::filesystem::rename(filename, stream.str().c_str());
}
int main(int argc, char** argv)
{
el::Loggers::addFlag(el::LoggingFlag::StrictLogFileSizeCheck);
el::Configurations conf("log.conf");
el::Loggers::reconfigureAllLoggers(conf);
el::Helpers::installPreRollOutCallback(rolloutHandler);
for (int i = 0; i < 100000; ++i)
{
LOG(INFO) << "Test==========================================================";
}
el::Helpers::uninstallPreRollOutCallback();
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include "boost/filesystem.hpp" #include "easylog/easylogging++.h" INITIALIZE_EASYLOGGINGPP static unsigned int idx = 0; void rolloutHandler(const char* filename, std::size_t size) { std::stringstream stream; stream << filename << "." << ++idx; boost::filesystem::rename(filename, stream.str().c_str()); } int main(int argc, char** argv) { el::Loggers::addFlag(el::LoggingFlag::StrictLogFileSizeCheck); el::Configurations conf("log.conf"); el::Loggers::reconfigureAllLoggers(conf); el::Helpers::installPreRollOutCallback(rolloutHandler); for (int i = 0; i < 100000; ++i) { LOG(INFO) << "Test=========================================================="; } el::Helpers::uninstallPreRollOutCallback(); return 0; } |
按照小时滚动的我加了一些简单粗暴的代码实现了,就不放出来献丑了,如果大家需要,可以单独找我获取。
其中log.conf是配置文件,大致内容如下:
C++
* GLOBAL:
FORMAT = "[%level | %datetime] | %msg"
ENABLED = true
TO_FILE = true
TO_STANDARD_OUTPUT = true
MILLISECONDS_WIDTH = 3
PERFORMANCE_TRACKING = false
MAX_LOG_FILE_SIZE = 209715200 ## Throw log files away after 2097152 2MB / 209715200 200MB / 4398046511104 1GB
* INFO:
LOG_FLUSH_THRESHOLD = 10
FILENAME = "log/game_server_info_%datetime{%Y%M%d%H}.log"
ENABLED = true
* DEBUG:
FILENAME = "log/game_server_debug_%datetime{%Y%M%d%H}.log"
ENABLED = true
* WARNING:
LOG_FLUSH_THRESHOLD = 0
FILENAME = "log/game_server_warn_%datetime{%Y%M%d%H}.log"
ENABLED = true
* TRACE:
* VERBOSE:
FORMAT = "%level-%vlevel | %datetime{%d/%M/%y} | %msg"
## Error logs
* ERROR:
LOG_FLUSH_THRESHOLD = 0
ENABLED = true
FILENAME = "log/game_server_error_%datetime{%Y%M%d%H}.log"
* FATAL:
LOG_FLUSH_THRESHOLD = 0
ENABLED = true
FILENAME = "log/game_server_fatal_%datetime{%Y%M%d%H}.log"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | * GLOBAL: FORMAT = "[%level | %datetime] | %msg" ENABLED = true TO_FILE = true TO_STANDARD_OUTPUT = true MILLISECONDS_WIDTH = 3 PERFORMANCE_TRACKING = false MAX_LOG_FILE_SIZE = 209715200 ## Throw log files away after 2097152 2MB / 209715200 200MB / 4398046511104 1GB * INFO: LOG_FLUSH_THRESHOLD = 10 FILENAME = "log/game_server_info_%datetime{%Y%M%d%H}.log" ENABLED = true * DEBUG: FILENAME = "log/game_server_debug_%datetime{%Y%M%d%H}.log" ENABLED = true * WARNING: LOG_FLUSH_THRESHOLD = 0 FILENAME = "log/game_server_warn_%datetime{%Y%M%d%H}.log" ENABLED = true * TRACE: * VERBOSE: FORMAT = "%level-%vlevel | %datetime{%d/%M/%y} | %msg" ## Error logs * ERROR: LOG_FLUSH_THRESHOLD = 0 ENABLED = true FILENAME = "log/game_server_error_%datetime{%Y%M%d%H}.log" * FATAL: LOG_FLUSH_THRESHOLD = 0 ENABLED = true FILENAME = "log/game_server_fatal_%datetime{%Y%M%d%H}.log" |
相关文章推荐
- 关于SpringMVC的rest的一个问题: HTTP Status 405 - JSPs only permit GET POST or HEAD.。
- 通过一个实例来介绍JSF技术
- 一个面向对象的应用程序框架介绍-FVision
- 用一个汽车游戏的例子来介绍一下事件(Event)
- 特地介绍一个网站 【 中国橡树编程资源网 】
- 推荐一个WINDOWS系统文件介绍的网站
- J2ME加密数据的一个第三方开源免费类库介绍
- 介绍一个PHP5事件驱动的好工程
- 一个介绍ado.net的网站 adoguy
- 一个关于工作流的网站介绍
- 介绍一个好网站
- 一个NHibernate的介绍
- 介绍一个好东西 - Konfabulator
- 介绍一个好站
- 见老队友,又介绍了一个朋友做瑜伽……
- 介绍一个很好用的overwrite 迭代器
- 一个图形爱好者的书架.-也来介绍一下我的藏书.
- 介绍一个功能强大的API函数 ShellExecute
- 介绍一个ASP.NET开发工具Web Matrix
- 介绍一个Bug tracking system