How to fetch process,thread name,levelname in customized python logger
Asked Answered
A

2

17

I am developing customized logger program,as per the requirement i need to fetch the process,thread and name of object Inside the called function(In below example its obj needs to fetch inside the get_configured_logger function) and class name to which obj belongs. as shown with comments in below code, please give some ideas to achieve this.

import logging, logging.handlers
from logging import StreamHandler, Formatter
class A:
  def get_configured_logger(self,name):
      logger = logging.getLogger(name)
      if (len(logger.handlers) == 0):                
                FORMAT = "%(process)s %(thread)s:-(asctime)s - %(name)s - %(levelname)s - %(message)-%(module)"

                #print 'process:',process
                #print 'thread:',thread
                #print 'levelname:',levelname
                #print  'Module:',(name portion of filename).

                #print 'obj:,'name of the object(Eg:obj),current function( Eg: get_configured_logger) called by' 
                #print 'class name:(obj is instance of class)' 
                formatter = logging.Formatter(fmt=FORMAT)                                 
                handler = logging.StreamHandler()
                handler.setFormatter(formatter)
                logger.addHandler(handler)
                logger.setLevel(logging.DEBUG)        
      return logger

if __name__=="__main__":
    obj=A()
    logger = obj.get_configured_logger("DEMO")
    logger.debug("TEST")

Thanks

hema

Astragal answered 20/10, 2012 at 16:2 Comment(0)
R
42

To add current process/thread name to a log message you could specify in the format string:

%(processName)s %(threadName)s

To get them as strings:

process_name = multiprocessing.current_process().name
thread_name = threading.current_thread().name
Repeated answered 20/10, 2012 at 16:54 Comment(1)
Just for completeness I would like to add the ident attribute, for getting the thread's identifier. For the current process I usually use os.getpid()Homopolar
A
7

Thread name

The documentation describes an easy interface to access the current Thread, you can then use its name attribute to have the Thread name.

You can then use:

import threading
threading.current_thread().name

Be aware that it's not unique.

Process name

There is no easy way of getting the process name as this is dependent on the OS you are using. You can however get the process ID (pid) doing:

import os
os.getpid()

That is unless you are using the multiprocessing module and launch subprocesses, in which case you can use the multiprocessing module which presents an interface closely similar to that of the Threading module.

Appetite answered 20/10, 2012 at 16:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.