Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk menggunakan modul pengelogan dalam Python

Bagaimana untuk menggunakan modul pengelogan dalam Python

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2023-05-12 18:10:06
ke hadapan
1826 orang telah melayarinya

    1. Pengelogan konfigurasi rendah

    Log dibahagikan kepada lima peringkat berikut ini dipadankan untuk nyahpepijat dari bawah ke atas--. >maklumat-->amaran-->ralat-->kritikal, tahap terendah lalai ialah tahap amaran.

    1.v1

    import logging
    
    logging.debug('调试信息')
    logging.info('正常信息')
    logging.warning('警告信息')
    logging.error('报错信息')
    logging.critical('严重错误信息')
    Salin selepas log masuk

    AMARAN:root: mesej amaran
    RALAT:root: mesej ralat
    KRITIKAL:root: mesej ralat serius

    Versi v1 tidak boleh menentukan tahap log; ia hanya boleh mencetak ke skrin dan tidak boleh menulis ke fail. Oleh itu ia boleh ditukar kepada kod berikut.

    2.v2

    import logging
    
    # 日志的基本配置
    
    logging.basicConfig(filename='access.log',
                        format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S %p',
                        level=10)
    
    logging.debug('调试信息')  # 10
    logging.info('正常信息')  # 20
    logging.warning('警告信息')  # 30
    logging.error('报错信息')  # 40
    logging.critical('严重错误信息')  # 50
    Salin selepas log masuk

    Anda boleh menukar tingkah laku lalai modul pengelogan melalui parameter tertentu dalam fungsi logging.basicConfig() Parameter yang tersedia ialah:

    • nama fail: Buat FiledHandler dengan nama fail yang ditentukan (konsep pengendali akan diterangkan secara terperinci kemudian), supaya log akan disimpan dalam fail yang ditentukan.

    • mod fail: mod pembukaan fail, parameter ini digunakan apabila nama fail ditentukan Nilai lalai ialah "a" dan juga boleh ditentukan sebagai "w".

    • format: Tentukan format paparan log yang digunakan oleh pengendali.

    • datefmt: Tentukan format tarikh dan masa.

    • tahap: Tetapkan tahap log rootlogger (konsep khusus akan diterangkan kemudian)

    • strim: Buat StreamHandler dengan strim yang ditentukan . Anda boleh menentukan output kepada sys.stderr, sys.stdout atau fail lalai ialah sys.stderr. Jika kedua-dua nama fail dan parameter strim disenaraikan, parameter strim akan diabaikan.

    Memformat rentetan yang boleh digunakan dalam parameter format:

    • %(name)s nama Logger

    • %(levelno)s Tahap log dalam bentuk berangka

    • %(levelname)s Tahap log dalam bentuk teks

    • % ( nama laluan)s Nama laluan penuh modul yang memanggil fungsi output log, mungkin bukan

    • % (nama fail)s Nama fail modul yang memanggil fungsi output log

    • %(modul)s Nama modul yang memanggil fungsi output log

    • %(funcName)s Nama fungsi yang memanggil output log fungsi

    • %(lineno)d Baris kod di mana pernyataan yang memanggil fungsi output log terletak

    • %(dicipta)f Masa semasa, dinyatakan sebagai nombor titik terapung standard UNIX yang mewakili masa

    • %(relativeCreated)d Apabila mengeluarkan maklumat log, bilangan milisaat sejak Logger dicipta

    • %(asctime)s Nilai semasa dalam masa bentuk rentetan. Format lalai ialah "2003-07-08 16:49:45,896". Perkara yang mengikuti koma ialah milisaat

    • %(benang)d ID urutan. Mungkin tiada nama utas

    • %(threadName). Mungkin tiada

    • %(proses)d ID proses. Mungkin tiada

    • %(mesej)s mesej output pengguna

    versi v2 tidak boleh menentukan pengekodan aksara ia hanya boleh dicetak ke a fail.

    3.v3

    Modul pengelogan mengandungi empat peranan: logger, Penapis, Objek Pemformat, Pengendali

    • logger: objek yang menjana log

    • Penapis: objek untuk menapis log

    • Objek pemformat: objek format log yang berbeza boleh disesuaikan dan kemudian diikat pada objek Pengendali yang berbeza untuk digunakan digunakan untuk mengawal format log Pengendali yang berbeza

    • Pengendali: menerima log dan mengawal pencetakan ke tempat yang berbeza, FileHandler digunakan untuk mencetak ke fail, StreamHandler digunakan untuk mencetak ke terminal

    '''
    critical=50
    error =40
    warning =30
    info = 20
    debug =10
    '''
    
    
    import logging
    
    # 1、logger对象:负责产生日志,然后交给Filter过滤,然后交给不同的Handler输出
    logger = logging.getLogger(__file__)
    
    # 2、Filter对象:不常用,略
    
    # 3、Handler对象:接收logger传来的日志,然后控制输出
    h2 = logging.FileHandler('t1.log')  # 打印到文件
    h3 = logging.FileHandler('t2.log')  # 打印到文件
    sm = logging.StreamHandler()  # 打印到终端
    
    # 4、Formatter对象:日志格式
    formmater1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
                                   datefmt='%Y-%m-%d %H:%M:%S %p',)
    
    formmater2 = logging.Formatter('%(asctime)s :  %(message)s',
                                   datefmt='%Y-%m-%d %H:%M:%S %p',)
    
    formmater3 = logging.Formatter('%(name)s %(message)s',)
    
    
    # 5、为Handler对象绑定格式
    h2.setFormatter(formmater1)
    h3.setFormatter(formmater2)
    sm.setFormatter(formmater3)
    
    # 6、将Handler添加给logger并设置日志级别
    logger.addHandler(h2)
    logger.addHandler(h3)
    logger.addHandler(sm)
    
    # 设置日志级别,可以在两个关卡进行设置logger与handler
    # logger是第一级过滤,然后才能到handler
    logger.setLevel(30)
    h2.setLevel(10)
    h3.setLevel(10)
    sm.setLevel(10)
    
    # 7、测试
    logger.debug('debug')
    logger.info('info')
    logger.warning('warning')
    logger.error('error')
    logger.critical('critical')
    Salin selepas log masuk

    2. Pengelogan konfigurasi tinggi

    1. Konfigurasikan fail log

    Tiga versi log di atas hanyalah untuk membawa kepada fail konfigurasi log kami yang berikut.

    import os
    import logging.config
    
    # 定义三种日志输出格式 开始
    standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                      '[%(levelname)s][%(message)s]'  # 其中name为getLogger()指定的名字;lineno为调用日志输出函数的语句所在的代码行
    simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
    id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
    # 定义日志输出格式 结束
    
    logfile_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # log文件的目录,需要自定义文件路径 # atm
    logfile_dir = os.path.join(logfile_dir, 'log')  # C:\Users\oldboy\Desktop\atm\log
    
    logfile_name = 'log.log'  # log文件名,需要自定义路径名
    
    # 如果不存在定义的日志目录就创建一个
    if not os.path.isdir(logfile_dir):  # C:\Users\oldboy\Desktop\atm\log
        os.mkdir(logfile_dir)
    
    # log文件的全路径
    logfile_path = os.path.join(logfile_dir, logfile_name)  # C:\Users\oldboy\Desktop\atm\log\log.log
    # 定义日志路径 结束
    
    # log配置字典
    LOGGING_DIC = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'standard': {
                'format': standard_format
            },
            'simple': {
                'format': simple_format
            },
        },
        'filters': {},  # filter可以不定义
        'handlers': {
            # 打印到终端的日志
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',  # 打印到屏幕
                'formatter': 'simple'
            },
            # 打印到文件的日志,收集info及以上的日志
            'default': {
                'level': 'INFO',
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
                'formatter': 'standard',
                'filename': logfile_path,  # 日志文件
                'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M  (*****)
                'backupCount': 5,
                'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
            },
        },
        'loggers': {
            # logging.getLogger(__name__)拿到的logger配置。如果''设置为固定值logger1,则下次导入必须设置成logging.getLogger('logger1')
            '': {
                # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
                'handlers': ['default', 'console'],
                'level': 'DEBUG',
                'propagate': False,  # 向上(更高level的logger)传递
            },
        },
    }
    
    
    
    def load_my_logging_cfg():
        logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置
        logger = logging.getLogger(__name__)  # 生成一个log实例
        logger.info('It works!')  # 记录该文件的运行状态
        
        return logger
    
    
    if __name__ == '__main__':
        load_my_logging_cfg()
    Salin selepas log masuk

    2. Log penggunaan

    import time
    import logging
    import my_logging  # 导入自定义的logging配置
    
    logger = logging.getLogger(__name__)  # 生成logger实例
    
    
    def demo():
        logger.debug("start range... time:{}".format(time.time()))
        logger.info("中文测试开始。。。")
        for i in range(10):
            logger.debug("i:{}".format(i))
            time.sleep(0.2)
        else:
            logger.debug("over range... time:{}".format(time.time()))
        logger.info("中文测试结束。。。")
    
    
    if __name__ == "__main__":
        my_logging.load_my_logging_cfg()  # 在你程序文件的入口加载自定义logging配置
        demo()
    Salin selepas log masuk

    3

    Atas ialah kandungan terperinci Bagaimana untuk menggunakan modul pengelogan dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan