一、Logger类、LogStream类
1、日志作用
开发过程中:
调试错误 更好的理解程序
运行过程中:
诊断系统故障并处理 记录系统运行状态
2、日志级别
TRACE
指出比DEBUG粒度更细的一些信息事件(开发过程中使用)
DEBUG
指出细粒度信息事件对调试应用程序是非常有帮助的。(开发过程中使用)
INFO
表明消息在粗粒度级别上突出强调应用程序的运行过程。
WARN
系统能正常运行,但可能会出现潜在错误的情形。
ERROR
指出虽然发生错误事件,但仍然不影响系统的继续运行。
FATAL
指出每个严重的错误事件将会导致应用程序的退出。
class Logger
{
public:
enum LogLevel {
TRACE, DEBUG, INFO, WARN, ERROR, FATAL, NUM_LOG_LEVELS,
};
// compile time calculation of basename of source file
class SourceFile { };
private: class Impl { };
};
template<int SIZE> class FixedBuffer : boost::noncopyable
class LogStream : boost::noncopyable
{
typedef LogStream self;
public: // 4000
typedef detail::FixedBuffer<detail::kSmallBuffer> Buffer;
};
class Fmt // : boost::noncopyable { public:
template<typename T> Fmt(const char* fmt, T val) { // 按照fmt 格式将val 格式化成字符串放入buf_中 length_ = snprintf(buf_, sizeof buf_, fmt, val); };
};
3、formatInteger() //是把数字或者指针的值当作字符串写入
代码语言:cpp复制const char digits[] = "9876543210123456789";
const char* zero = digits 9;
const char digitsHex[] = "0123456789ABCDEF";
LogStream& LogStream::operator<<(int v)
{
formatInteger(v);
return *this;
}
template<typename T>
void LogStream::formatInteger(T v)
{ //32
if (buffer_.avail() >= kMaxNumericSize)
{
size_t len = convert(buffer_.current(), v);
buffer_.add(len);
}
}
// Efficient Integer to String Conversions, by Matthew Wilson.
template<typename T>
size_t convert(char buf[], T value)
{
T i = value;
char* p = buf;
do
{
int lsd = static_cast<int>(i % 10);
i /= 10;
*p = zero[lsd];
} while (i != 0);
if (value < 0)
{
*p = '-';
}
*p = '