the more handlers I add I get duplicate Log outputs
Opened this issue · 1 comments
Hi, thanks for your great logging tool, i helps alot.
first i only used 2 handler (info, to_term and error, to_file) now i added two more to_term handlers and now i get duplicate logs on the terminal:
here my logutil.py:
# loguitl.py
import ulogger
from machine import RTC
import ntptime
import time
class Clock(ulogger.BaseClock):
def __init__(self):
self.rtc = RTC()
#try:
# ntptime.settime()
# print ('Time set: {}'.format(time.localtime()))
#except Exception as e:
# print(e)
# print ('NTP time set failed')
# return
def __call__(self) -> str:
# Format the datetime object as a string using strftime() method
y,m,d,wd,h,min,s,ms = self.rtc.datetime()
#return '%d-%d-%d %d:%d:%d' % (y,m,d,h,mi,s)
#Todo change to %F formatted string for better performance
return "%04d-%02d-%02d %02d:%02d:%02d" % (y,m,d,h,min,s)
clock = Clock()
handlers = (
ulogger.Handler(
level=ulogger.INFO,
colorful=True,
fmt="&(time)% - &(level)% - &(name)% - &(fnname)% - &(msg)%",
clock=clock,
direction=ulogger.TO_TERM,
),
ulogger.Handler(
level=ulogger.WARN,
colorful=True,
fmt="&(time)% - &(level)% - &(name)% - &(fnname)% - &(msg)%",
clock=clock,
direction=ulogger.TO_TERM,
),
ulogger.Handler(
level=ulogger.DEBUG,
colorful=True,
fmt="&(time)% - &(level)% - &(name)% - &(fnname)% - &(msg)%",
clock=clock,
direction=ulogger.TO_TERM,
),
ulogger.Handler(
level=ulogger.ERROR,
colorful=True,
fmt="&(time)% - &(level)% - &(name)% - &(fnname)% - &(msg)%",
clock=clock,
direction=ulogger.TO_FILE,
file_name="log.txt",
max_file_size=32768 # max for 4k
)
)
def get_logger(name: str):
return ulogger.Logger(name, handlers)
all = (get_logger)
from my different python tasks (i use a lot of async tasks) i get the logger like this:
log = logutil.get_logger("SMW")
log = logutil.get_logger("WEB")
....
all log.info are duplicated and all log.error and log.warn i get 3 times, for example my log output looks like this:
2024-06-08 08:58:46 - ERROR - WEB - handle_request - need more than 0 values
2024-06-08 08:58:46 - ERROR - WEB - handle_request - need more than 0 values
2024-06-08 08:58:46 - ERROR - WEB - handle_request - need more than 0 values
2024-06-08 08:58:51 - INFO - SMW - queue_data - TFS Event awaited
2024-06-08 08:58:51 - INFO - SMW - queue_data - TFS Event awaited
Any ideas why this is happening? Am i doing something wrong?
当你设置较低级的 handler 时,是会输出更高级的信息的,假设你设置了一个 info 级别的 handler,同时设置了一个 error 的 handler,那么你调用 log.error,两个 handler 都会 catch 这个请求。
这是一个设计上的设定,因为单片机平台资源有限,在支持库中处理这个问题可能会占用较多资源。
而且一般的用法是将低等级的 log 输出到控制台方便调试,只有高等级的才会输出至文件。
如果你想解决这个问题,可以尝试自己去做 filter。