Python Forum
python logger help ... save logger into different folder - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: python logger help ... save logger into different folder (/thread-38521.html)



python logger help ... save logger into different folder - mg24 - Oct-25-2022

Hi Team,

I am using below code for logger.
Created logger function. and calling that function its working.


I want to save logger file into different folder.
my below code saves logger file into same folder.

is there any improvement possible in existing code.




import logging
def get_custom_logger(level,fname,logger_name,mode_type):
    logger = logging.getLogger(logger_name)
    logger.setLevel(level)
    fileHandler = logging.FileHandler(f'{fname}', mode=mode_type)
    fileHandler.setLevel(level)
    formatter = logging.Formatter(
    '%(asctime)s:%(levelname)s:%(name)s:%(message)s',
    datefmt = '%d/%m/%Y %I:%M:%S %p')
    fileHandler.setFormatter(formatter)
    logger.addHandler(fileHandler)
    return logger



Calling function
import logging
logger = get_custom_logger(logging.DEBUG,"test.log",'table1',"w")
logger.warning('new warning message from test module')
logger.warning('info message from test module')
logger.warning('new warning message from test module')


Output :- 
25/10/2022 06:30:17 PM:WARNING:table1:new warning message from test module
25/10/2022 06:30:17 PM:INFO:table1:info message from test module
25/10/2022 06:30:17 PM:WARNING:table1:new warning message from test module



RE: python logger help ... save logger into different folder - snippsat - Oct-25-2022

Just give path to folder you want to save to.
logging.FileHandler('G:/div_code/web_env/logg.log', mode=mode_type)
Your f-string dos nothing on line 5.
fileHandler = logging.FileHandler(f'{fname}', mode=mode_type)
# Same 
fileHandler = logging.FileHandler(fname, mode=mode_type)
Can make Path with f-string eg like this.
>>> fname = 'logg.log'
>>> folder_path = 'G:/div_code/web_env/'
>>> f'{path}{fname}'
'G:/div_code/web_env/logg.log'
I would adivice to use loguru ,then all the ugly boilerplate code is gone.
from loguru import logger

logger.remove() # Only log info to file
logger.add(r"G:\div_code\web_env\error.log", rotation="2 day")

@logger.catch
def foo():
    return 1 / 0

foo()