loguru logs to different files and folders

26 Views Asked by At

I am trying to add different loguru logs to different files under different directories.

import copy
import os
from loguru import logger

task_log_info = {
"zg": ("zerodhaGeneral", "zerodhaGeneral.log"),
"zm": ("Master-zerodha", "ZerodhaAsMaster-Orders.log"),
"zc": ("Child-Zerodha", "ZerodhaAsChild-Orders.log"),
}

for task_id, (folder_name, log_file_name) in task_log_info.items():
task_folder = f"logs/{folder_name}"
os.makedirs(task_folder, exist_ok=True)

log_file = f"{task_folder}/{log_file_name}"
logger.remove()
logger_ = copy.deepcopy(logger)
logger_t = logger_.bind(task_id=task_id)
logger_t.add(
    log_file,
    rotation="1 week",
    retention="6 months",
    # sys.stdout,
    level="TRACE",
    backtrace=True,
    serialize=False,
    format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {module}:{function}:{line} - {message} | {extra}"
)

and trying to write longs like below:

from logConf import logger_t

logger_t.info("zc info {}".format("zc"))
logger_t.info("zm info {}".format("zm"))
logger_t.info("zg info {}".format("zg"))

But it is writing all longs in same file under single directory. What am i doing wrong?

I have followed this for reference: https://loguru.readthedocs.io/en/stable/resources/recipes.html#creating-independent-loggers-with-separate-set-of-handlers

I have tried to create different handlers like below also, but it is also saving all logs to same file:

zg = logger.bind(folder="logs\\zerodhaGeneral")
zg.add(
'logs\\zerodhaGeneral\\zerodhaGeneral.log',
rotation="1 week",
retention="6 months",
# sys.stdout,
level="TRACE",
backtrace=True,
serialize=False,
filter=lambda record, store_name=store_name: record["extra"]["store"] == store_name,
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {module}:{function}:{line} - {message} | 
{extra}"
)


zm = logger.bind(folder="logs\\Master-zerodha")
zm.add(
'logs\\Master-zerodha\\ZerodhaAsMaster-Orders.log',
rotation="1 day",
retention=None,
# sys.stdout,
level="TRACE",
backtrace=True,
serialize=False,
filter=lambda record: record["extra"].get("log_type") == "zm",
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {module}:{function}:{line} - {message} | 
{extra}"
)
0

There are 0 best solutions below