1. 程式人生 > >log4cplus的一個常用封裝例項

log4cplus的一個常用封裝例項

、、VLog.h
#pragma once
#ifndef VLOG_H
#define	VLOG_H

#include <log4cplus/logger.h>
#include <log4cplus/layout.h>
#include <log4cplus/loglevel.h>
#include <log4cplus/fileappender.h>
#include <log4cplus/consoleappender.h>

#include <log4cplus/helpers/loglog.h>

using namespace log4cplus;
using namespace helpers;

/**
 * 使用log4cplus
 * @param logfile 記錄的檔案路徑,如“main.log”
 * @param format 格式化字首,預設%d [%l] %-5p : %m %n
 * @param bebug 是否列印bebug資訊,預設true
 * @param lv 設定日記級別
 * @return 
 */
void InitLog4cplus(
        const wchar_t* logfile,
        const bool console = true,
        const bool bebug = true,
        LogLevel lv = DEBUG_LOG_LEVEL,
        const wchar_t* format = L"%d : %m%n" /*%d %-5p [%c < %l] : %m %n*/
        );

/**
 * 獲得根日誌
 * @return 
 */
Logger GetRootLogger(void);

/**
 * 獲得子日誌
 * @param child 子日誌名,如,sub;sub.sub1
 * @return 
 */
Logger GetSubLogger(const wchar_t* sub);

/**
 * 關閉日誌系統
 */
void ShutdownLogger(void);

#endif	/* VLOG_H */

//VLog.cpp

/************************************************************************/
/* 使用規則:                                                             */
/* 需要log4cplus動態/靜態連結庫及標頭檔案                                      */
/* log4cplus.lib + log4cplus.dll 為動態連結庫。log4cplusS.lib為靜態連結庫    */
/************************************************************************/
#include "VLog.h"

void InitLog4cplus(const wchar_t* logfile, const bool console, const bool bebug,
        LogLevel lv, const wchar_t* format)
/*
NOT_SET_LOG_LEVEL               (   -1) :接受預設的LogLevel,如果有父logger則繼承它的
LogLevelALL_LOG_LEVEL           (    0) :開放所有log資訊輸出
TRACE_LOG_LEVEL                 (    0) :開放trace資訊輸出(即ALL_LOG_LEVEL)
DEBUG_LOG_LEVEL                 (10000) :開放debug資訊輸出
INFO_LOG_LEVEL                  (20000) :開放info資訊輸出
WARN_LOG_LEVEL                  (30000) :開放warning資訊輸出
ERROR_LOG_LEVEL                 (40000) :開放error資訊輸出
FATAL_LOG_LEVEL                 (50000) :開放fatal資訊輸出
OFF_LOG_LEVEL                   (60000) :關閉所有log資訊輸出
 */ {
    // 0.日誌系統配置:設定顯示debug資訊
    LogLog::getLogLog()->setInternalDebugging(bebug);


    // 建立螢幕輸出Appender,不採用stderror流,不採用立刻寫入模式
    SharedAppenderPtr pappender1(new RollingFileAppender(logfile, 1024 * 1024 * 200, 50, false));
    // 生成的日誌檔名稱,檔案最大值(最小1 * 200 M),擴充套件50檔案個數,不採用立刻寫入模式

    // 2.例項化一個layout物件
    // 2.1建立layout佈局格式
    std::auto_ptr<Layout> playout1(new PatternLayout(format));

    // 3.將layout物件繫結(attach)到appender物件
    // pappender.setLayout(std::auto_ptr<Layout> layout);
    pappender1->setLayout(playout1);

    // 4.Logger :記錄器,儲存並跟蹤物件日誌資訊變更的實體,當你需要對一個物件進行記錄時,就需要生成一個logger。
    Logger rootLogger = Logger::getRoot();

    // 5.將appender物件繫結(attach)到logger物件,如省略此步驟,標準輸出(螢幕)appender物件會繫結到logger
    rootLogger.addAppender(pappender1);

    if (console) {
        // 1.Appenders :掛接器,與佈局器緊密配合,將特定格式的訊息輸出到所掛接的裝置終端 (如螢幕,檔案等等)。
        SharedAppenderPtr pappender2(new ConsoleAppender(false, false));
        std::auto_ptr<Layout> playout2(new PatternLayout(format));
        pappender2->setLayout(playout2);
        rootLogger.addAppender(pappender2);
    }

    // 6.設定logger的優先順序,如省略此步驟,各種有限級的訊息都將被記錄
    rootLogger.setLogLevel(lv);
}

Logger GetRootLogger(void) {
    return Logger::getRoot();
}

Logger GetSubLogger(const wchar_t* sub) {
    return Logger::getInstance(sub);
}

void ShutdownLogger(void) {
    Logger::getRoot().shutdown();
}

<p>#include "VLog.h"</p><p>int _tmain(int argc, _TCHAR* argv[])
{
&nbsp;// 加入log4cplus
&nbsp;// 初始化log4cplus
&nbsp;InitLog4cplus(L"main.log");</p><p>&nbsp;// 日誌物件:測試一
&nbsp;log4cplus::Logger test1 = GetSubLogger(L"test1");
&nbsp;// 日誌物件:測試一 第一次測試
&nbsp;log4cplus::Logger test1_01 = GetSubLogger(L"test1.01");</p><p>&nbsp;// 型別日誌記錄
&nbsp;LOG4CPLUS_DEBUG(test1_01, "you can log like this :" << "hello " << 100 << '!');</p><p>&nbsp;// 關閉日誌
&nbsp;ShutdownLogger();
}
</p>

FROM: http://blog.csdn.net/eclipser1987/article/details/6904301

相關推薦

log4cplus一個常用封裝例項

、、VLog.h #pragma once #ifndef VLOG_H #define VLOG_H #include <log4cplus/logger.h> #include <log4cplus/layout.h> #include <

封裝一個常用的js工具類

/** * @author:水痕 * @timer:2016-07-28 * @email:[email protected] * @version:1.0 * @title:封裝一個自己常用的工具類js * @note: */ ; (f

unity常用例項一個GameObject的三種方法

1, 直接拖物件賦值。public GameObject cube;2, Find函式 public GameObject cube; public void ChangeColor2Red() { print ("Change cube color to red"

多態、Object類和 JDK常用封裝類型

事物 引用 null static 包裝 變化 end number demo 多態 定義:某一類事物的多種存在形態。 多態的體現:父類的引用指向了自己的子類對象。父類的引用也可以接收自己的子類對象。 多態的前提:必須是類與類之間有關系,要麽繼承,要麽實現。通常還有一個前提

java7JDK的常用封裝類型

我們 tokenizer 針對 tokenize ken 所有 分析器 數字 抽象 Java Scanner類   Java 5添加了java.util.Scanner類,這是一個用於掃描輸入文本的新的實用程序。它是以前的StringTokenizer和Matcher類之間

我的Android進階之旅------&gt;Android關於Log的一個簡單封裝

eight ron track 100% oid content amp 嚴重 center android.util.Log類,能夠方便地用於在編碼調試過程中打印日誌。可是在公布後的產品中,假設有太多的日誌打印。則會嚴重地影響性能。對android.util.Lo

django常用封裝

hex .sh 返回 config turn .get end con res #encoding:utf-8from django.shortcuts import render_to_responseimport hashlibfrom binascii import

一個常用的通過curl發送HTTP請求的函數

請求方式 multi return ini als 參數 一個 pic def function: function curl_get($url, $params) { return curl_http($url, $params, ‘GET‘); } func

python中如何統計一個類的例項化物件

類中的靜態變數 需要通過類名.靜態變數名 來修改 ;通過物件不能修改 python中如何統計一個類的例項化物件?? 1 class Person: 2 #靜態變數count,用於記錄類被例項化的次數 3 count = 0 4 5

前後端分離業務邏輯常用封裝函式(一)

1.陣列去空: function clear_arr_trim(array) {  for(var i = 0 ;i<array.length;i++){   if(array[i] == "" ||  (array[i] == null)   || typeo

公鑰,證書,以及公鑰基礎通訊設施模型的一個詳細實現例項流程。

說是加密,不是隻用一種加密方法,而是多種方法協作,達到我們的加密目的。 加密不是說加密完,就完事了,還要考慮第三方能不能解密 如果解密了該怎麼辦? 怎麼加密更快? 如果對方解密了?我們怎麼確保被解密的資料不被篡改?   加密特點: 對稱加密:快速(加密資料,防止

建立一個類的例項有哪些方法

原 https://blog.csdn.net/lizhen54/article/details/74544801 1、關鍵字 new。工廠模式是對這種方式的包裝; 2、類實現克隆介面,克隆一個例項。原型模式是一個應用例項; 3、用該類的載入器,newinstance。java的

一個Web佈局例項

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script

appium常用封裝(一)

一、Dos下執行adb devices獲取udid封裝 1 #coding=utf-8 2 import os 3 class DosCmd: 4 def excute_cmd_result(self,command): 5 result_list = []

ansible常用模組例項

blockinfile 檔案中某行後插入多行 [[email protected]] /opt/software$ ansible test[1:2] -m blockinfile -a 'dest=/usr/local/kafka/config/zookeeper.pro

Ngins 配置常用八大例項

例項一、Nginx 虛擬主機配置 拷貝一份配置檔案,配置虛擬主機;並且建立一個 nginx 的普通使用者 [[email protected] ~]# cd /usr/local/nginx/conf [[email protected] conf]# cp

關於rem適配的3種常用封裝

在之前寫了一篇關於rem適配的文章,但是沒有給出具體的封裝,那麼今天這裡給出常用的三種方法,分享出來供大家參考學習,下面話不多說了,來隨著小編一起學習學習吧 一、rem1.js 第一種方法考慮了m端螢幕旋轉的問題.對相容性做出了一定的處理,具體看程式碼.

一個簡單的例項Loan類的實現和測試

import java.util.Scanner; public class TestLoanClass { public static void main(String[] args) { // TODO 自動生

一個完整jsonp例項

一個完整jsonp例項 伺服器環境 SPA 理論知識點 注意 例項解讀 客戶端 頁面所在的服務端 跨域請求的服務端 除錯 效果截圖 總結

一個封裝到另一個類中-Python

一個類的物件作為另一個類的引數 #物件的封裝 ***** #將一個類的物件,封裝到,另一個類中的方法中去 class Teacher: def __init__(self,tea_name,tea_age): self.teacher_name = tea_name