1. 程式人生 > >單例模式封裝的logging類庫的實現(Python)

單例模式封裝的logging類庫的實現(Python)

import logging
import sys


def __singletion(cls):
    """
    單例模式的裝飾器函式
    :param cls: 實體類
    :return: 返回實體類物件
    """
    instances = {}
    def getInstance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return getInstance


@__singletion
class C_Logger(object):
    def __init__(self, appName, logFileName, out=0):
        """
        獲取日誌處理物件
        :param appName: 應用程式名
        :param logFileName: 日誌檔名
        :param out: 設定輸出端:0:預設控制檯,1:輸入檔案,其他:控制檯和檔案都輸出
        :return: 返回日誌物件
        """
        self.appName = appName
        self.logFileName = logFileName
        self.out = out

    def getLogger(self):
        # 獲取logging例項
        logger = logging.getLogger(self.appName)
        # 指定輸出的格式
        formatter = logging.Formatter('%(name)s  %(asctime)s  %(levelname)-8s:%(message)s')

        # 檔案日誌
        file_handler = logging.FileHandler(self.logFileName, encoding='utf-8')
        file_handler.setFormatter(formatter)

        # 控制檯日誌
        console_handler = logging.StreamHandler(sys.stdout)
        console_handler.setFormatter(formatter)

        # # 指定日誌的最低輸出級別
        logger.setLevel(logging.INFO)  # 20

        # 為logger新增具體的日誌處理器輸出端
        if self.out == 1:
            logger.addHandler(file_handler)
        elif self.out == 0:
            logger.addHandler(console_handler)
        else:
            logger.addHandler(file_handler)
            logger.addHandler(console_handler)
        return logger



相關推薦

php 模式封裝MySQL

function RR sqli self () tab pub con 實例化 class MysqlConn {  //定義一個私有的靜態屬性,用來存放實例化的對象 private static $dbcon;  //定義一個私有的靜態屬性,用來存在數據庫的連接

模式和靜態的區別Difference between static class and singleton pattern

csdn就當自己的記事本了 這個問題的答案引用Jon Skeet 回答 首先明確的是兩個都是執行緒安全的,兩者間最大的區別就是單例可以實現介面 (Ps: 或者繼承基類,雖然這種方式很少見

C++中的模式及按需釋放模型

四、多執行緒安全的通用單例類例項獲取器 例子工程的名稱是SingletonThreadSafeInstanceGetter。 剛開始寫本文時,本沒有想實現多執行緒版本,主觀上以為同通常的單例模式一樣,多個多執行緒同步就可以了,很簡單,讓讀者自己開發就好了,不過後來真正去思考

模式封裝logging實現Python

import logging import sys def __singletion(cls): """ 單例模式的裝飾器函式 :param cls: 實體類 :return: 返回實體類物件 """ instances =

使用模式封裝網路工具(okH)

我是用的是介面傳值,所以第一步是介面的建立 public interface NetWorkModelInterface { //失敗 void failure(Exception e); //成功 void success(String result)

實現xml和json格式資料——模式的Db(第二篇)

       上一篇只是實現了xml和json格式資料的類的封裝,不過它是沒有資料的來源的;因此,本篇文章是封裝一個呼叫資料庫資料的方法,視訊裡面用的是mysql_connect()等函式,不過現在用這些函式會出現notice,因為這些函式已經過時了,將來可能不會再用到;其實

載入一個時,其內部類是否同時被載入?引申出模式的另一種實現方式...

載入一個類時,其內部類是否同時被載入?下面我們做一個實驗來看一下。public class Outer { static { System.out.println("load outer class..."); } //靜態內部類 sta

載入一個時,其內部類是否同時被載入?引申出模式的另一種實現方式

 載入一個類時,其內部類是否同時被載入?下面我們做一個實驗來看一下。  Java程式碼   1.    public class Outer {   2.        static {   3.            System.out.println("load o

模式 封裝PHP的mysql

<?php /* *describe:單例模式 資料庫類 單例模式的必要條件 (1)私有的構造方法-為了防止在類外使用new關鍵字例項化物件 (2)私有的成員屬性-為了防止在類外引入這個存放物件的屬性 (3

設計模式模式以及簡單代碼實現

以及 應用 安全 設計模式 div 代碼實現 測試類 加載類 實例 單例模式 保證整個應用某個實例只有一個 單例模式包括懶漢模式和餓漢模式 餓漢模式 懶漢模式 測試類 區別: 餓漢模式的特點加載類時比較慢,但運行獲取對象速度比較快 線程安全 懶漢模式加

python模式控制成只初始化一次,常規型的python模式在新式和經典中的區別。

spa alt let __main__ python2 urn 時間 div 分享 單例模式的寫法非常多,但常規型的單例模式就是這樣寫的,各種代碼可能略有差異,但核心就是要搞清楚類屬性 實例屬性,就很容易寫出來,原理完全一模一樣。 如下: 源碼: class

PHP 模式優點意義及如何實現

一、什麼是單例模式? 1、含義       作為物件的建立模式,單例模式確保某一個類只有一個例項,而且自行例項化並向整個系統全域性地提供這個例項。它不會建立例項副本,而是會向單例類內部儲存的例項返回一個引用。 2、單例模式的三個要點: (1). 需要一個儲存類

HttpUrlConnection+圖片載入+工具+介面回撥++AsyncTask封裝工具

1.MainActivity頁面 package com.example.httpurlconnection; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import andro

Retrofit 模式 聯網工具 簡單使用

匯入依賴 implementation 'com.squareup.retrofit2:retrofit:2.4.0' 先寫一個介面 import java.util.Map; import okhttp3.ResponseBody; import retrofit2.Call

模式和靜態的區別對比

什麼是單例模式 單例模式指的是在應用***整個生命週期內只能存在一個例項。***單例模式是一種被廣泛使用的設計模式。他有很多好處,能夠避免例項物件的重複建立,減少建立例項的系統開銷,節省記憶體。 單例模式和靜態類的區別 首先理解一下什麼是靜態類,靜態類就

Java中基於靜態變數與模式對快取的簡單實現

●What & Why 快取是什麼?他有什麼好處?相信不用說大家都知道。 目前筆者在做一個Java開發的Web專案,專案啟動的時候需要將大量不變的平臺數據放入快取中,方便快速讀取。一開始筆者很疑惑,Java是不能直接操作記憶體的,但是我們快取卻是要把資料放入記憶體

最安全的模式--java使用內部類實現模式

實現類 public class Singleton {     private static class LazyHolder {            private static final Singleton INSTANCE = new Singleton();

模式之靜態內部類實現

這些天在看一本書,關於java多執行緒的,系統的掌握了多執行緒的一些知識,就簡單的把一些學習重要的知識記錄下來。 DCL可以解決多執行緒單例模式的非執行緒安全問題,當然也可以用其他方式,這裡就說另一種用內部類實現的。 如下程式碼: package test; public

Java模式私有靜態內部類實現並測試

package org.vincent; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionExce

模式中靜態成員變數初始化問題

    最近做一個專案,C++語言,使用到了單例模式做設計。在具體編寫程式碼時,使用了靜態成員變數和靜態函式。程式碼如下: class Camera { private: //(省略若干程式碼) static Camera* pCamera ; //(省略若干