Log.h
#pragma once
#include <memory>
/// 记录追踪日志
#define LOG_TRACE(msg) (Log::GetInstance()->Trace(msg));
/// 记录调试日志
#define LOG_DEBUG(msg) (Log::GetInstance()->Debug(msg));
/// 记录信息日志
#define LOG_INFO(msg) (Log::GetInstance()->Info(msg));
/// 记录告警日志
#define LOG_WARNING(msg) (Log::GetInstance()->Warning(msg));
/// 记录错误日志
#define LOG_ERROR(msg) (Log::GetInstance()->Error(msg));
/// 记录致命日志
#define LOG_FATAL(msg) (Log::GetInstance()->Fatal(msg));
using namespace std;
class Log
{
public:
Log();
~Log();
static std::shared_ptr<Log> GetInstance();
void Trace(string);
void Debug(string);
void Info(string);
void Warning(string);
void Error(string);
void Fatal(string);
};
Log.cpp
#include "Log.h"
#include <sstream>
#include <iostream>
#include <boost/filesystem.hpp>
#include <log4cplus/configurator.h>
#include <log4cplus/logger.h>
#include <log4cplus/log4cplus.h>
#include <log4cplus/consoleappender.h>
static shared_ptr<Log> g_singleInstance(new Log());
Log::Log()
{
using namespace std;
using namespace boost::filesystem;
path p = current_path();
stringstream url;
url << p.string() << "/log.properties";
cout << "url: " << url.str() << endl;
log4cplus::PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT(url.str()));
}
Log::~Log()
{
log4cplus::Logger::shutdown();
}
shared_ptr<Log> Log::GetInstance()
{
return g_singleInstance;
}
void Log::Trace(string mes)
{
LOG4CPLUS_TRACE(log4cplus::Logger::getRoot(), mes);
}
void Log::Debug(string mes)
{
LOG4CPLUS_DEBUG(log4cplus::Logger::getRoot(), mes);
}
void Log::Info(string mes)
{
LOG4CPLUS_INFO(log4cplus::Logger::getRoot(), mes);
}
void Log::Warning(string mes)
{
LOG4CPLUS_WARN(log4cplus::Logger::getRoot(), mes);
}
void Log::Error(string mes)
{
LOG4CPLUS_ERROR(log4cplus::Logger::getRoot(), mes);
}
void Log::Fatal(string mes)
{
LOG4CPLUS_FATAL(log4cplus::Logger::getRoot(), mes);
}
log.properties
#根Logger日志输出级别=TRACE,默认输出所有级别日志
log4cplus.rootLogger=TRACE,STDOUT,ALL_MSGS
#输出到控制台
log4cplus.appender.STDOUT=log4cplus::ConsoleAppender
log4cplus.appender.STDOUT.layout=log4cplus::PatternLayout
log4cplus.appender.STDOUT.layout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S %a}] %-5p %m %n
#输出到文件
log4cplus.appender.ALL_MSGS=log4cplus::RollingFileAppender
#日志名称
log4cplus.appender.ALL_MSGS.File=Log.log
#日志输出格式
log4cplus.appender.ALL_MSGS.layout=log4cplus::PatternLayout
#本地时间4位年2位月2位日 2位时:2位分:2位秒:6位毫秒 [线程ID] 5位日志级别 - 原始信息换行符
log4cplus.appender.ALL_MSGS.layout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S %a}] %-5p %m%n
#最大文件大小,当小于200kb的时候,默认为200kb,单位有(MB、KB)
log4cplus.appender.ALL_MSGS.MaxFileSize= 2MB
#最多文件个数
log4cplus.appender.ALL_MSGS.MaxBackupIndex=5
testconsole.cpp
#include <iostream>
#include "Log.h"
using namespace std;
int main()
{
std::cout << "Test Console..................................." << endl;
LOG_DEBUG("test");
LOG_ERROR("test");
LOG_TRACE("test");
LOG_INFO("test");
LOG_WARNING("test");
LOG_FATAL("test");
}
调整log.properties中的logger,可控制日志输出