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")
# -*- 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 :线程打开")