python logging的应用

1. logger = logging.getLogger(log_name) 是根据log_name返回一个文件流,不通线程中应该传入不通log_name

如果在一个进程中中出现多次创建同一个log_name的文件流也不会报错,并且会重复打印和记录多次,如下:

logger = logging.getLogger(log_name)
import logging
import os
from logging.handlers import TimedRotatingFileHandler


def get_new_logger(log_dir, log_name, output_level=logging.INFO, file_level=logging.INFO, stream_flag=False):
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)
    log_file_path = '%s/%s' % (log_dir, log_name)
    _logger = logging.getLogger(log_name)
    _logger.setLevel(output_level)
    formatter = logging.Formatter('[LOG_INFO] %(asctime)s - %(levelname)s: - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
    fh = TimedRotatingFileHandler(filename=log_file_path, when="D", interval=1, backupCount=10)
    fh.setLevel(file_level)
    fh.setFormatter(formatter)
    if stream_flag:
        ch = logging.StreamHandler()
        ch.setLevel(output_level)
        ch.setFormatter(formatter)
        _logger.addHandler(ch)
    _logger.addHandler(fh)
    return _logger

class Smoke():
    def __init__(self, orin_type, log_dir, s_update, m_update):
        self.orin_type = orin_type
        self.log_dir = log_dir
        self.name = ('log_' + self.orin_type + '_{}.log').format(date)
        self.logger = get_new_logger(self.log_dir, self.name, output_level=logging.INFO, file_level=logging.INFO,stream_flag=True)


def run(self):
    self.logger.info("run info")
    self.logger.error("run error")
View Code

 

# -*- coding: utf-8 -*-
"""
@Last modify date:    2024/6/20 12:51

@Author:              Chai, Dongxu
"""
import datetime
import logging
import os
from logging.handlers import TimedRotatingFileHandler
from datetime import datetime
import os

def get_new_logger(log_dir, log_name, output_level=logging.INFO, file_level=logging.INFO, stream_flag=False):
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)
    log_file_path = '%s/%s' % (log_dir, log_name)
    _logger = logging.getLogger(log_name)
    _logger.setLevel(output_level)
    formatter = logging.Formatter('[LOG_INFO] %(asctime)s - %(levelname)s: - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
    fh = TimedRotatingFileHandler(filename=log_file_path, when="D", interval=1, backupCount=10)
    fh.setLevel(file_level)
    fh.setFormatter(formatter)
    if stream_flag:
        ch = logging.StreamHandler()
        ch.setLevel(output_level)
        ch.setFormatter(formatter)
        _logger.addHandler(ch)
    _logger.addHandler(fh)
    return _logger


class monitor:
    def __init__(self, log_dir='./'):
        self.log_dir = log_dir
        self.name = ('CUP_resume' + '_{}.log').format(str(datetime.now()).replace(':', '-').split('.')[0].replace(' ', '_'))
        self.logger = get_new_logger(self.log_dir, self.name, output_level=logging.INFO, file_level=logging.INFO,stream_flag=True)
        self.restart_count = 0
        self.online = True
    
    def run(self):
        result = os.popen('adb devices')
        device_id = result.read()
        if device_id == '':
            if True == self.online:
                self.restart_count += 1
                logging.error(f'Restart {self.restart_count}')
            self.online = False
        else:
            if False == self.online:
                logging.info(f'devices id: {device_id}')
            self.online = True


# !/usr/bin/python
# -*- coding: UTF-8 -*-
from threading import Timer
import time
import threading
import sys

localtime = time.localtime(time.time())  # 创建时间对象


# 定义线程调用函数
class threading_TWHA(threading.Thread):
    def __init__(self, threadID, name):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
    
    def run(self):
        while True:
            if user_choice == "exit":  # 如果控制台输入C10A
                print("thread3 :线程退出")
                return
            else:
                cup_monitor.run()


if __name__ == '__main__':
    # 创建新线程
    thread3 = threading_TWHA(3, "heWaterHeaterAuto")
    cup_monitor = monitor()
    while True:
        user_choice = input()
        thread3.start()
        print("thread3 :线程打开")
    

 

 
posted @ 2022-06-22 17:11  小柴i  阅读(54)  评论(0编辑  收藏  举报