micropython-ulogger icon indicating copy to clipboard operation
micropython-ulogger copied to clipboard

the more handlers I add I get duplicate Log outputs

Open gampam2000 opened this issue 8 months ago • 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?

gampam2000 avatar Jun 08 '24 07:06 gampam2000