muduo日志库分析(二)
上一篇文章,主要分析了LogStream{.h,.cc}、Logging{.h, .cc},这两部分主要是日志库的前端部分,具体可以看muduo日志库分析(一)
在文章的最后,写出了日志库将buffer中的数据输出的函数是在Logging的析构函数中实现的,而输出的destination则是由 OutputFunc 来实现的,通过 Logger::setOutput 函数来设置输出函数。
如果没有设置,默认是stdout。
如果要设置输出到文件,则需要自己定义如下函数:
void dummyFlush()
{
fflush(g_file);
}
void dummyOutput(const char* msg, int len)
{
if (g_file)
{
fwrite(msg, 1, len, g_file);
}
}
然后,采用以下代码添加设置。
Logger::setOutput(dummyOutput);
Logger::setFlush(dummyFlush);
由于不是每次析构调用输出函数的时候都会flush,因此,可能存在前端写入以后,数据暂留内核,而没有写入磁盘的情况。
如果要设置使用异步日志,AsyncLogging,则需要如下代码设置
muduo::AsyncLogging log(::basename(name), kRollSize);
g_asyncLog = &log;
muduo::Logger::setOutput(asyncOutput);
void asyncOutput(const char* msg, int len)
{
g_asyncLog->append(msg, len);
}