为什么我的python控制台日志包含换行而不是换行?

2024-06-16 10:39:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python3服务,它读取传感器并通过MQTT发送值(参见pitelemetry)。它是作为一个Python模块编写的,主程序在它们自己的文件中包含一系列类。运行时,为每个传感器生成一个线程

使用此设置,当我以交互方式运行时,会看到以下控制台日志:

[2019-12-23 15:53:47,792 - pitelemetry/MainThread - INFO] - pitelemetry started
[2019-12-23 15:53:47,824 - pitelemetry/shed_temp - DEBUG] - pitelemetry.pitelemetry is running
[2019-12-23 15:53:47,827 - pitelemetry/MainThread - DEBUG] - Thread shed_temp created and started
[2019-12-23 15:53:47,828 - pitelemetry/shed_temp - DEBUG] - mqttClient = dellups_shed_temp, mqttBroker=mqtt.agdon.net, mqttTopic=tel/19c/shed/temp
                                                                                                                                                  [2019-12-23 15:53:47,833 - pitelemetry.mqtt/shed_temp - INFO] - **THIS CONNECTION IS INSECURE** SSL/TLS not supported for this platform
                                                                                                                                                                                                                                                                                         [2019-12-23 15:53:48,715 - pitelemetry.pitemperature/shed_temp - DEBUG] - Current temp = 9.6C
                                                                                   [2019-12-23 15:53:48,718 - pitelemetry.pitemperature/shed_temp - DEBUG] - Current time = 2019-12-23 15:53:48.717833
                                                                                                                                                                                                      [2019-12-23 15:53:48,719 - pitelemetry.pitemperature/shed_temp - DEBUG] - jsonified data = {"temp": "9.6", "time": "2019-12-23 15:53:48.717833"}
                                                   [2019-12-23 15:53:48,721 - pitelemetry.pitemperature/shed_temp - DEBUG] - Published {"temp": "9.6", "time": "2019-12-23 15:53:48.717833"} to tel/19c/shed/temp
                                                                                                                                                                                                                 [2019-12-23 15:53:49,626 - pitelemetry.mqtt/Thread-2 - DEBUG] - Client on_connect called.
       [2019-12-23 15:53:49,628 - pitelemetry.mqtt/Thread-2 - DEBUG] - Connected to broker: mqtt.agdon.net

如您所见,所有的启动都正常,但是当较低级别的类开始记录时,没有换行符,只有换行符

知道为什么吗

更多信息:

bin/pitelemetry服务二进制文件

...
def setup_logging(
        default_path='/etc/pitelemetry_logging.yaml',
        default_level=logging.INFO,
        env_key='LOG_CFG'
):
    """Setup Logging configuration"""

    path = default_path
    value = os.getenv(env_key, None)
    if value:
        path = value
    if os.path.exists(path):
        with open(path, 'rt') as f:
            config = yaml.safe_load(f.read())
        logging.config.dictConfig(config)
    else:
        logging.basicConfig(level=default_level)

def main(argv):
    """Create and run a thread for each sensor being monitored """

...

    # Initialise logging
    setup_logging()
    log = logging.getLogger("pitelemetry")
    log.info("pitelemetry started")
...

来自etc/pitelemetry\u logging.py

version: 1
disable_existing_loggers: False
formatters:
  simple:
    format: "[%(asctime)s - %(name)s/%(threadName)s - %(levelname)s] - %(message)s"

handlers:
  console:
    class: logging.StreamHandler
    level: DEBUG
    formatter: simple
    stream: ext://sys.stdout

  info_file_handler:
    class: logging.handlers.RotatingFileHandler
    level: INFO
    formatter: simple
    filename: info.log
    maxBytes: 10485760 # 10MB
    backupCount: 20
    encoding: utf8

  debug_file_handler:
    class: logging.handlers.RotatingFileHandler
    level: DEBUG
    formatter: simple
    filename: debug.log
    maxBytes: 10485760 # 10MB
    backupCount: 20
    encoding: utf8

  error_file_handler:
    class: logging.handlers.RotatingFileHandler
    level: ERROR
    formatter: simple
    filename: errors.log
    maxBytes: 10485760 # 10MB
    backupCount: 20
    encoding: utf8

loggers:
  pitelemetry:
    level: DEBUG
    handlers: [console]
    propagate: no

root:
  level: INFO
  handlers: [console, info_file_handler, error_file_handler]

来自src/pitelemetry/pitelemetry.py

class PiTelemetry(Thread):
    """
    Abstract Threading Class containing all but the details for each sensor.
    Sub-classed by concrete sensor-specific classes.
    """

    broker = None
    source = None
    log = None

    def __init__(self, broker, sensor, shutdown):
        ''' Constructor. '''
        Thread.__init__(self)
        self.log=logging.getLogger(__name__)

        # unpack the config
        self.broker = broker
        self.sensor = sensor
        self.shutdown = shutdown

...

   def run(self):
        """Connect to the broker and start reporting"""

        self.log = logging.getLogger("pitelemetry")
        self.log.debug("%s is running", __name__)

来自src/pitelemetry/pitemperature.py

   def _read_device(self,device):
        self.log = logging.getLogger(__name__)
        try:
            lines = self._read_temp_raw(device)
        except Exception as ex:
            self.log.error("Failed to read data from device", exc_info=True)
            self.log.debug("Exiting")
            sys.exit(1)

Tags: pathdebugselfinfologlogginghandlersbroker