log4cplus日誌工具樣例
logcplus是一款很好用的日誌記錄系統,操作簡便,能記錄程式執行的時間,執行位置,方便定位問題。這裡記錄下linux下的安裝及使用。
安裝:
1. 下載安裝包log4cplusxxx,解壓,進入解壓出的資料夾
2. ./configure CXXFLAGS=”-std=c++0x” –prefix=/usr/local/
3. make
4. sudo make install
5. sudo vim /etc/ld.so.conf,在末尾行新增/usr/local/lib
6. sudo ldconfig生效
使用:
這裡使用的是qt-creator,pro中的設定如下:
CONFIG += c++11
TARGET = log4cplus_example
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
LIBS += -L/usr/local/lib/log4cplus -llog4cplus
INCLUDEPATH += -L/usr/local/include/log4cplus
main.cpp:
#include <cstdlib>
#include <log4cplus/logger.h>
#include <log4cplus/configurator.h>
#include <log4cplus/helpers/loglog.h>
#include <log4cplus/helpers/stringhelper.h>
#include <log4cplus/loggingmacros.h>
#include <unistd.h>
using namespace std;
using namespace log4cplus;
using namespace log4cplus::helpers;
void Fun(Logger& logger)
{
std::string text = "fun logger";
LOG4CPLUS_TRACE(logger, text);
LOG4CPLUS_DEBUG(logger, text);
LOG4CPLUS_INFO(logger, text);
LOG4CPLUS_WARN(logger, text);
LOG4CPLUS_ERROR(logger, text);
}
int main()
{
int i = 2;
log4cplus::ConfigureAndWatchThread watcher("log.properties", 10*1000);
Logger logger = log4cplus::Logger::getInstance("root");
Logger loggerTest = log4cplus::Logger::getInstance("test");
Logger loggerFun = Logger::getInstance(("fun"));
while(i--)
{
//PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log.properties"));
// trace
LOG4CPLUS_TRACE(logger, "root logger");
// debug
LOG4CPLUS_DEBUG(logger, "root logger");
// info
LOG4CPLUS_INFO(logger, "root logger");
// warn
LOG4CPLUS_WARN(logger, "root logger");
// error
LOG4CPLUS_ERROR(logger, "root logger");
//fatal
LOG4CPLUS_FATAL(logger, "root logger");
//
LOG4CPLUS_TRACE(loggerTest,"test logger");
LOG4CPLUS_ERROR(loggerTest,"test logger");
Fun(loggerFun);
sleep(10);
}
return 0;
}
log4cplus::ConfigureAndWatchThread watcher(“log.properties”, 10*1000):載入檔案並監測檔案是否變化,可修改日誌級別檢視執行結果。
需在生成的可執行檔案路徑中,建立log資料夾,放入配置的檔案log.properties,其中log.properties配置如下:
log4cplus.rootLogger=TRACE, R
log4cplus.appender.R=log4cplus::DailyRollingFileAppender
log4cplus.appender.R.File=./log/root.log
log4cplus.appender.R.DatePattern='.'yyyy-MM-dd
log4cplus.appender.R.Schedule=DAILY
log4cplus.appender.R.MaxBackupIndex=7
log4cplus.appender.R.layout=log4cplus::PatternLayout
log4cplus.appender.R.layout.ConversionPattern=%D{[%Y/%m/%d-%H:%M:%S,%Q]} [%t] [%l] %-5p%x - %m%n
log4cplus.appender.R.filters.1=log4cplus::spi::LogLevelRangeFilter
log4cplus.appender.R.filters.1.LogLevelMin=TRACE
log4cplus.appender.R.filters.1.LogLevelMax=ERROR
log4cplus.appender.R.filters.1.AcceptOnMatch=true
log4cplus.appender.R.filters.2=log4cplus::spi::DenyAllFilter
log4cplus.logger.test=ERROR, RR
log4cplus.appender.RR=log4cplus::DailyRollingFileAppender
log4cplus.appender.RR.File=./log/test.log
log4cplus.appender.RR.MaxBackupIndex=24
log4cplus.appender.RR.Schedule=HOURLY
log4cplus.appender.RR.Append=true
log4cplus.appender.RR.layout=log4cplus::PatternLayout
log4cplus.appender.RR.layout.ConversionPattern=%p %D{%Y-%m-%d %H:%M:%S.%q}:%t %F:%L "%m"%n
log4cplus.logger.fun=TRACE, RRR
log4cplus.appender.RRR=log4cplus::DailyRollingFileAppender
log4cplus.appender.RRR.File=./log/fun.log
log4cplus.appender.RRR.MaxBackupIndex=7
log4cplus.appender.RRR.Schedule=DAILY
log4cplus.appender.RRR.Append=true
log4cplus.appender.RRR.layout=log4cplus::PatternLayout
log4cplus.appender.RRR.layout.ConversionPattern=%D{[%Y/%m/%d-%H:%M:%S,%Q]} [%t] [%l] %-5p%x - %m%n
log4cplus.appender.RRR.filters.1=log4cplus::spi::LogLevelRangeFilter
log4cplus.appender.RRR.filters.1.LogLevelMin=DEBUG
log4cplus.appender.RRR.filters.1.LogLevelMax=ERROR
log4cplus.appender.RRR.filters.1.AcceptOnMatch=true
log4cplus.appender.RRR.filters.2=log4cplus::spi::DenyAllFilter
其中log4cplus.rootLogger指是根日誌記錄器,所有的日誌都會記錄到它所對應的日誌檔案下./log/root.log;
log4cplus.logger.fun其它日誌記錄器,可通過Logger::getInstance((“fun”))呼叫,由它所寫的日誌只會寫入它對應的檔案下./log/fun.log;
MaxBackupIndex–同一天或者小時日誌最多生成多少個;
Schedule–按天記錄或者按小時記錄等;
ConversionPattern–輸出格式;
LogLevelMin–輸出最小級別,LogLevelMax–輸出最大級別。
輸出結果(僅貼出根日誌root的日誌):
[2016/11/24-10:40:48,040.834] [140737353987904] [../log4cplus_example/main.cpp:34] TRACE - root logger
[2016/11/24-10:40:48,041.111] [140737353987904] [../log4cplus_example/main.cpp:36] DEBUG - root logger
[2016/11/24-10:40:48,041.140] [140737353987904] [../log4cplus_example/main.cpp:38] INFO - root logger
[2016/11/24-10:40:48,041.149] [140737353987904] [../log4cplus_example/main.cpp:40] WARN - root logger
[2016/11/24-10:40:48,041.170] [140737353987904] [../log4cplus_example/main.cpp:42] ERROR - root logger
[2016/11/24-10:40:48,041.182] [140737353987904] [../log4cplus_example/main.cpp:47] ERROR - test logger
[2016/11/24-10:40:48,041.315] [140737353987904] [../log4cplus_example/main.cpp:16] TRACE - fun logger
[2016/11/24-10:40:48,041.352] [140737353987904] [../log4cplus_example/main.cpp:17] DEBUG - fun logger
[2016/11/24-10:40:48,041.468] [140737353987904] [../log4cplus_example/main.cpp:18] INFO - fun logger
[2016/11/24-10:40:48,041.592] [140737353987904] [../log4cplus_example/main.cpp:19] WARN - fun logger
[2016/11/24-10:40:48,041.710] [140737353987904] [../log4cplus_example/main.cpp:20] ERROR - fun logger