您的位置:首页 > 编程语言 > C语言/C++

介绍一个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;
}
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;

}
上面注册过滚动函数后就可以按照大小滚动了,不过注意一定要加上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"
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"

生成出来的log非常整齐,整体满足了我的需求,而且只有头文件,不需要编译库,实在是方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息