easylogging的简单用法
#include "easylogging++.h"
INITIALIZE_EASYLOGGINGPP
class Integer
{
public:
Integer(int i) : m_underlyingInt(i)
{
}
Integer &operator=(const Integer &integer)
{
m_underlyingInt = integer.m_underlyingInt;
return *this;
}
int getInt(void) const { return m_underlyingInt; }
private:
int m_underlyingInt;
};
// Following line does the trick!
inline MAKE_LOGGABLE(Integer, integer, os)
{
os << "integer val:" << integer.getInt();
return os;
}
int main()
{
// START_EASYLOGGINGPP(argc, argv);
el::Configurations confFromFile("../../my-logger.conf");
el::Loggers::reconfigureAllLoggers(confFromFile);
el::Loggers::addFlag(el::LoggingFlag::ColoredTerminalOutput);
//自定义类型打印
Integer count = 5;
LOG(INFO) << "count:" << count;
float val = 1.0 / 3;
LOG(DEBUG) << "this is debug info";
LOG(INFO) << "float example:" << val;
LOG(ERROR) << "Error log";
LOG(WARNING) << "WARNING! log";
VLOG(1) << "Verbose log 1";
VLOG(2) << "Verbose log 2";
return 0;
}
my-logger.conf内容:
* GLOBAL:
FORMAT = "[%datetime][%level][%logger]%msg"
FILENAME = "/tmp/myeasylog.log"
ENABLED = true
TO_FILE = true
TO_STANDARD_OUTPUT = true
SUBSECOND_PRECISION = 3
PERFORMANCE_TRACKING = false
MAX_LOG_FILE_SIZE = 2097152 ## Throw log files away after 2MB
* DEBUG:
ENABLED = true ## We will set it to false after development completed
FORMAT = "[%datetime][%level][%logger][%file:%line:%func]%msg"
global字段定义了所有log level的配置, debug字段则只定义了DEBUG level的配置, 它会覆盖GLOBAL的设置.
- MAX_LOG_FILE_SIZE
定义了log文件的最大size, 这里设置的是2MB(1024 * 1024 * 2 = 2097152), 如果log文件的大小超过了2M, easylog会删除log文件, 然后再生成一个新的log文件.
编译:
g++ demo.cpp easylogging++.cc -o demo.out \
-std=c++11 \
-lpthread \
-DELPP_DEBUG_ERRORS \
-DELPP_THREAD_SAFE \
-DELPP_STL_LOGGING \
-DELPP_FEATURE_ALL \
-DELPP_NO_GLOBAL_LOCK \
-DELPP_NO_DEFAULT_LOG_FILE
运行结果:
编译flag设置
有些配置可以在编译时使用宏来控制.
- ELPP_NO_DEFAULT_LOG_FILE
默认easylog会生成一个myeasylogging.log文件来存储log信息, 编译时加上这个宏则可以避免生成该文件.示例代码:
g++ demo.cpp easylogging++.cc -o demo.out -DELPP_NO_DEFAULT_LOG_FILE -std=c++11 -pthread "
-
ELPP_DISABLE_DEBUG_LOGS
产品发布时,我们希望debug类型的log不要打印出来,可以添加ELPP_DISABLE_DEBUG_LOGS编译选项在编译期去除debug打印. 注意前面的conf文件里也有个ENABLED选项可以控制debug的输出, 不过那个是在运行时控制的, 一旦编译时设置了ELPP_DISABLE_DEBUG_LOGS, 那么conf文件里的ENABLED就不生效了. -
ELPP_THREAD_SAFE
保证线程中打印是安全的, 注意链接时要添加-lpthread -
DELPP_STL_LOGGING
打印stl容器, 定义该flag后支持下列容器:
std::vector std::list std::deque std::queue
std::stack std::priority_queue std::set std::multiset
std::pair std::bitset std::map std::multimap
另外, 如果定义了下列容器还能解锁更多容器:
Template Macro Needed
std::array ELPP_LOG_STD_ARRAY
std::unordered_map ELPP_LOG_UNORDERED_MAP
std::unordered_multimap ELPP_LOG_UNORDERED_MAP
std::unordered_set ELPP_LOG_UNORDERED_SET
std::unordered_multiset ELPP_LOG_UNORDERED_SET