Logging with 2 process in application

gayatri funde fundegayatri at gmail.com
Tue Feb 23 01:17:17 EST 2021


On Monday, February 22, 2021 at 4:14:53 PM UTC+5:30, Peter Otten wrote:
> On 22/02/2021 06:57, gayatri funde wrote: 
> > 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... at 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... at 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
> [...]
> > def daily_log(): 
> > global firstTime 
> > 
> > try: 
> > now = datetime.datetime.now() 
> > log_day = now.day 
> > initialize_logger("Log_start.log") 
> > while True:
> Unless there is an exception you are forever stuck in this loop...
> > 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 *
> ... and as the import implicitly invokes daily_log() you won't get here, 
> i. e. the code below is not executed.
> > 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() 
> >

daily_log() call is necessary in loggingModule.py because if we import loggingModule.py module into mainModule.py, Import won't execute daily_log() function by itself, either I make explicit call of daily_log() in mainModule.py or loggingModule.py



More information about the Python-list mailing list