logging – How to log source file name and line number in Python

logging – How to log source file name and line number in Python

Sure, check formatters in logging docs. Specifically the lineno and pathname variables.

%(pathname)s Full pathname of the source file where the logging call was issued(if available).

%(filename)s Filename portion of pathname.

%(module)s Module (name portion of filename).

%(funcName)s Name of function containing the logging call.

%(lineno)d Source line number where the logging call was issued (if available).

Looks something like this:

formatter = logging.Formatter([%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s,%m-%d %H:%M:%S)

On top of Sebs very useful answer, here is a handy code snippet that demonstrates the logger usage with a reasonable format:

#!/usr/bin/env python
import logging

logging.basicConfig(format=%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s,
    datefmt=%Y-%m-%d:%H:%M:%S,
    level=logging.DEBUG)

logger = logging.getLogger(__name__)
logger.debug(This is a debug log)
logger.info(This is an info log)
logger.critical(This is critical)
logger.error(An error occurred)

Generates this output:

2017-06-06:17:07:02,158 DEBUG    [log.py:11] This is a debug log
2017-06-06:17:07:02,158 INFO     [log.py:12] This is an info log
2017-06-06:17:07:02,158 CRITICAL [log.py:13] This is critical
2017-06-06:17:07:02,158 ERROR    [log.py:14] An error occurred

logging – How to log source file name and line number in Python

# your imports above ...


logging.basicConfig(
    format=%(asctime)s,%(msecs)d %(levelname)-8s [%(pathname)s:%(lineno)d in 
    function %(funcName)s] %(message)s,
    datefmt=%Y-%m-%d:%H:%M:%S,
    level=logging.DEBUG
)

logger = logging.getLogger(__name__)

# your classes and methods below ...
# An naive Sample of usage:
try:
    logger.info(Sample of info log)
    # your code here
except Exception as e:
    logger.error(e)

Different from the other answers, this will log the full path of file and the function name that might have occurred an error. This is useful if you have a project with more than one module and several files with the same name distributed in these modules.

Leave a Reply

Your email address will not be published. Required fields are marked *