On Monday, February 22, 2021 at 11:15:27 AM UTC+5:30, Chris Angelico wrote: > On Mon, Feb 22, 2021 at 4:41 PM gayatri funde <fundeg...@gmail.com> wrote: > > > > On Monday, February 22, 2021 at 10:47:57 AM UTC+5:30, Dan Stromberg wrote: > > > On Sun, Feb 21, 2021 at 9:10 PM gayatri funde <fundeg...@gmail.com> > > > wrote: > > > > Hello, > > > > > > > > Greetings!! Have a good day! > > > > > > > > This is regarding logging issue i am facing in my application. My > > > > requirement is to create log on daily basis while my application is > > > > running, So to do this i am creating new log file at midnight by > > > > comparing > > > > the day it starts and enter to new day with the while loop continuously > > > > checking on date. > > > > > > > > In my application i have 2 processes, So what my observation is on the > > > > day > > > > of start of application both process are able to log into the file, but > > > > as > > > > new day starts new file getting created and only main process log are > > > > getting written into new file, and other process is still writing to > > > > old > > > > day log. > > > > > > > > So could you please help me to understand this issue and it will be > > > > great > > > > to know solution if you can help me with this. > > > > > > > Is it possible each process has open a different "file" on the same > > > pathname, with only one actually being visible in the filesystem? > > > > > > Linuxes and Unixes allow such things. I am unaware of Windows being > > > powerful enough to do so, and besides there you'd probably use the Event > > > Log anyway. > > > > > > If that's the case, I do not know of a Python logging-module way of > > > correcting the problem, but you could introduce a third process that is > > > used just for logging, and have the original two send their log messages > > > to > > > the new 3rd logging process. > > > > > > Just to clarify, file names are different as i am appending date to each > > file name. On new day start main process is writing to new day file and > > another process is still writing to old date file. This i am trying on > > Linux system. > > > > Thanks for suggestion of creating one dedicated process for logging. But if > > you can help to find any is other reason why second process not able to > > find the new day file handler object. > > Thank you for your reply. > > > You'll need to show your code. Most likely, though, BOTH processes > need to independently update to the new file. > > ChrisA
I have 2 files mainModule.py and loggingModule.py files as below: In loggingModule.py file i am managing new log to create , which i am importing to mainModule.py file. loggingModule.py import logging import os, sys import os.path import datetime from threading import Thread import time firstTime = "false" def initialize_logger(fileName): global firstTime try: logger = logging.getLogger() logger.setLevel(logging.DEBUG) output_dir = os.getcwd() if firstTime == "true": for handler in logger.handlers[:]: # get rid of existing old handlers logger.removeHandler(handler) # create debug file handler and set level to debug try: handler = logging.FileHandler(os.path.join(output_dir, fileName), "w") except: print("problem to create log") handler.setLevel(logging.DEBUG) formatter = logging.Formatter("[%(levelname)s] (%(threadName)-30s) %(asctime)s %(message)s ") handler.setFormatter(formatter) logger.addHandler(handler) firstTime = "true" except Exception as ex: exc_type, exc_obj, tb = sys.exc_info() template = "An exception of type {0} occurred at {1}. Arguments:\n{2!r}" message = template.format(type(ex).__name__, tb.tb_lineno, ex.args) logging.error(message) def daily_log(): global firstTime try: now = datetime.datetime.now() log_day = now.day initialize_logger("Log_start.log") while True: currentDate = datetime.datetime.now().day time.sleep(60) if currentDate != log_day: # New day started initialize_logger("Log_continue.log") except Exception as ex: exc_type, exc_obj, tb = sys.exc_info() template = "An exception of type {0} occurred at {1}. Arguments:\n{2!r}" message = template.format(type(ex).__name__, tb.tb_lineno, ex.args) logging.error(message) daily_log() mainModule.py import Logic_Check import logging import multiprocessing from loggingModule import * def child_Process(var1): while True: time.sleep(10) logging.info('Log from Child Process') if __name__ == "__main__": var1 = "LotsOfSunshine" time.sleep(1) logging.info("Log from Main process") child_Multiprocess = multiprocessing.Process(target=child_Process, args=(var1,)) child_Multiprocess.start() -- https://mail.python.org/mailman/listinfo/python-list