1. 程式人生 > >boost log庫使用四

boost log庫使用四

現在,將boost log應用到一個已經存在的C++程式中用來替代CppCMS log。我用它完成一些任務,單個日誌檔案尺寸小於10M,磁碟剩餘空間最小要保持3G。

要達到這個目的,有些事情需要注意:

1. 包含正確的標頭檔案:

#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/sinks/text_file_backend.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
namespace logging = boost::log;
namespace src = boost::log::sources;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;

2. 必須註冊格式,否則你看不到severity欄位
void InitLog() {
  boost::log::register_simple_formatter_factory< boost::log::trivial::severity_level, char >("Severity");
  logging::add_file_log(
   keywords::file_name = AppHolder::Instance().config().log_folder + "/sign_%Y-%m-%d_%H-%M-%S.%N.log",
   keywords::rotation_size = 10 * 1024 * 1024,
   keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
   keywords::format = "[%TimeStamp%] (%Severity%) : %Message%",
   keywords::min_free_space=3 * 1024 * 1024
   );
  logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::debug);
}

3. 在main函式中, 呼叫InitLog之後,要設定屬性
InitLog();
    logging::add_common_attributes();
    using namespace logging::trivial;
    src::severity_logger< severity_level > lg;
    BOOST_LOG_SEV(lg, info) << "thread id: " << this_thread::get_id() << " Initialization succeeded";
現在,看一下日誌檔案,每個檔案尺寸都在10M以下,零點時分會產生新的日誌檔案
 -rw-r--r-- 1 root root  10M Dec  3 23:16 sign_2013-12-03_23-00-01.0.log
-rw-r--r-- 1 root root  10M Dec  3 23:36 sign_2013-12-03_23-16-55.1.log
-rw-r--r-- 1 root root  10M Dec  3 23:55 sign_2013-12-03_23-36-21.2.log
-rw-r--r-- 1 root root 2.4M Dec  4 00:00 sign_2013-12-03_23-55-33.3.log
-rw-r--r-- 1 root root  10M Dec  4 00:19 sign_2013-12-04_00-00-00.4.log
-rw-r--r-- 1 root root  10M Dec  4 00:38 sign_2013-12-04_00-19-30.5.log
-rw-r--r-- 1 root root  10M Dec  4 00:58 sign_2013-12-04_00-38-48.6.log
-rw-r--r-- 1 root root  10M Dec  4 01:17 sign_2013-12-04_00-58-06.7.log
-rw-r--r-- 1 root root  10M Dec  4 01:36 sign_2013-12-04_01-17-19.8.log
-rw-r--r-- 1 root root  10M Dec  4 01:56 sign_2013-12-04_01-36-45.9.log
-rw-r--r-- 1 root root  10M Dec  4 02:15 sign_2013-12-04_01-56-07.10.log

看其中一個日誌檔案
[2013-Dec-04 10:17:45.728393] (debug) : object id: 529df217186f983f62ffa718 sent data: 01 30 30 30 43 44 31 4F 4B 31 30 03  sent size:12


4. 在其他.cc檔案中,只需要include一個頭檔案

 #include <boost/log/trivial.hpp>
並使用巨集 BOOST_LOG_TRIVIAL()
BOOST_LOG_TRIVIAL(debug) << "object id: " << id_ << " sent data: " << PrintBytesAsHexString(*data, data->size()) << " sent size:" << data->size();

現在可以了。

boost log內部有很多細節要學習。暫時沒有時間分析它。將來有空會寫相關部落格。