社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何在自定义python日志类中动态地将变量传递给类_init__;方法

Jon • 2 年前 • 1118 次点击  

很难把我需要的东西写进一句话,但下面的代码很好地解释了这一点:

我的日志类位于一个单独的文件(log_文件)中,如下所示,其中定义了一个logger对象:

from io import StringIO
import logging

class NetddLog():
   def __init__(self, name, format="%(asctime)s %(levelname)s %(message)s", level=logging.INFO):
      self.name = name
      self.level = level
      self.format = format

      #Logger configuration.
      self.formatter = logging.Formatter(self.format)
      self.logger = logging.getLogger(name)#name
      self.logger.setLevel(self.level)
      #Logging to memory
      self.log_capture_string = StringIO()
      self.ch_logger = logging.StreamHandler(self.log_capture_string)
      self.ch_logger.setFormatter(self.formatter)
      self.logger.addHandler(self.ch_logger)

   def debug(self, msg, extra=None):
      self.logger.debug(msg, extra=extra)

ip_logger = NetddLog("IP_LOG")

在另一个文件(ip_文件)中,我的ping功能如下:

from log_file import ip_logger
from icmplib import ping

def ping_ip(ip_num, ip):
    try: 
        ip_logger.info(f"{ip_num}: Pinging {ip} started")

        host = ping(ip, count=4, interval=1, timeout=2, payload_size=64, privileged=True)
        if host.is_alive:
            ip_logger.info(f"{ip_num}: Pinging {ip} succeded")
        else:
            raise Exception 

    except Exception as err:
        ip_logger.error(f"{ip_num}: Pinging {ip} failed {err}")

ip_num是ip地址列表中的ip地址(ip)的编号,在另一个文件(主文件)中,我从中调用ping_ip(ip_num,ip)

日志消息打印得很好,但每次我都将ip_num放入实际的日志消息中。我想做的是,在类中创建记录器时,将其包含在记录器的格式中,并且可能只使用ping_ip(ip)调用函数

所以 初始化 类方法将如下所示: format=f"%(asctime)s %(levelname)s {ip_num}: %(message)s" ,这样我就不必在我创建的每个日志消息中都包含ip_num。在当前的类配置中,有没有一种方法可以实现这一点,或者有其他方法?(我希望尽可能地将内容分开,而不是将所有内容都放在主_文件中)

更新: 根据前面的回答,我刚刚重新定义了类中的日志方法,以便在格式中添加一个额外的参数。例如,info函数的变化如下所示 %(ip_num)s 可以添加到格式中。

   def info(self, ip_num, msg):
      self.d = {'ip_num': f"{ip_num}"}
      self.logger.info(msg, extra=self.d)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133950
 
1118 次点击  
文章 [ 1 ]  |  最新文章 2 年前