我有一个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)
目前没有回答
相关问题 更多 >
编程相关推荐