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.