پایتون لاگر – انجمن DEV

Summarize this content to 400 words in Persian Lang
متن نوشته
پستهای زیادی وجود دارد که نحوه پیکربندی لاگهای پایتون را تعریف میکنند و برخی از آنها بسیار نویز هستند، برخی دیگر ناقص هستند.
یک مثال با json logger در پایان
بنابراین در اینجا نسخه من از آن است که فقط کار می کند و به خوبی با اهداف من مطابقت دارد
مثال با خروجی متن ساده
logger = logging.getLogger(__name__)
# Change this level according to your needs
logger.setLevel(level=os.getenv(“LOG_LEVEL”, “INFO”))
logger.propagate = False
stdout = logging.StreamHandler(stream=sys.stdout)
# Default level for root logger is NOTSET which means all messages will be logged
# I prefer having this as is to avoid two places controlling what gets to output
# Leaving this to logger.setLevel to define what should be printed is more flexible undless devs are not allowed to control this (for log volume purposes, for example)
# https://docs.python.org/3/library/logging.config.html
# stdout.setLevel(logging.DEBUG)
fmt = logging.Formatter(
“%(name)s: %(asctime)s | %(levelname)s | %(filename)s:%(lineno)s | %(process)d >>> %(message)s”
)
stdout.setFormatter(fmt=fmt)
logger.addHandler(stdout)
# YOUR CODE BELOW
# Database connection
import psycopg2
from psycopg2.extras import RealDictCursor
logger.info(
f”Connecting to database ‘{rds_host}’ on port ‘{rds_port}’ as user ‘{rds_user}’ to database ‘{rds_database}'”
)
logger.debug(“Debug message when creating connection to database”)
connection = psycopg2.connect(
host=rds_host,
port=rds_port,
user=rds_user,
password=rds_password,
database=rds_database,
cursor_factory=RealDictCursor,
)
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خروجی نمونه برای سطح گزارش به عنوان INFO تنظیم شده است:
__main__: 2024-06-25 06:15:12,171 | INFO | main.py:39 | 61869 >>> Connecting to database ‘mydbinstance.cjzjxjzjzjzj.us-west-2.rds.amazonaws.com’ on port ‘5432’ as user ‘postgres’ to database ‘postgres’
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خروجی نمونه برای سطح گزارش به عنوان DEBUG تنظیم شده است:
__main__: 2024-06-25 06:17:38,664 | INFO | main.py:39 | 62437 >>> Connecting to database ‘mydbinstance.cjzjxjzjzjzj.us-west-2.rds.amazonaws.com’ on port ‘5432’ as user ‘postgres’ to database ‘postgres’
__main__: 2024-06-25 06:17:38,664 | DEBUG | main.py:42 | 62437 >>> Debug message when creating connection to database
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
مثال با خروجی json
استفاده از وابستگی پایتون-json-لاگر
logger = logging.getLogger(__name__)
# Change this level according to your needs
logger.setLevel(level=os.getenv(“LOG_LEVEL”, “INFO”))
logger.propagate = False
log_handler = logging.StreamHandler(stream=sys.stdout)
# Default level for root logger is NOTSET which means all messages will be logged
# https://docs.python.org/3/library/logging.config.html
# stdout.setLevel(logging.DEBUG)
fmt = “%(name)s: %(asctime)s | %(levelname)s | %(filename)s:%(lineno)s | %(process)d >>> %(message)s”
formatter = jsonlogger.JsonFormatter(fmt=fmt)
log_handler.setFormatter(fmt=formatter)
logger.addHandler(log_handler)
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
{“name”: “__main__”, “asctime”: “2024-07-01 15:28:07,119”, “levelname”: “INFO”, “filename”: “main.py”, “lineno”: 42, “process”: 60945, “message”: “Connecting to database ‘mydbinstance.cjzjxjzjzjzj.us-west-2.rds.amazonaws.com’ on port ‘5432’ as user ‘postgres’ to database ‘postgres'”}
{“name”: “__main__”, “asctime”: “2024-07-01 15:28:07,119”, “levelname”: “INFO”, “filename”: “main.py”, “lineno”: 207, “process”: 60945, “message”: “Starting execution…”}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
متن نوشته
پستهای زیادی وجود دارد که نحوه پیکربندی لاگهای پایتون را تعریف میکنند و برخی از آنها بسیار نویز هستند، برخی دیگر ناقص هستند.
یک مثال با json logger در پایان
بنابراین در اینجا نسخه من از آن است که فقط کار می کند و به خوبی با اهداف من مطابقت دارد
مثال با خروجی متن ساده
logger = logging.getLogger(__name__)
# Change this level according to your needs
logger.setLevel(level=os.getenv("LOG_LEVEL", "INFO"))
logger.propagate = False
stdout = logging.StreamHandler(stream=sys.stdout)
# Default level for root logger is NOTSET which means all messages will be logged
# I prefer having this as is to avoid two places controlling what gets to output
# Leaving this to logger.setLevel to define what should be printed is more flexible undless devs are not allowed to control this (for log volume purposes, for example)
# https://docs.python.org/3/library/logging.config.html
# stdout.setLevel(logging.DEBUG)
fmt = logging.Formatter(
"%(name)s: %(asctime)s | %(levelname)s | %(filename)s:%(lineno)s | %(process)d >>> %(message)s"
)
stdout.setFormatter(fmt=fmt)
logger.addHandler(stdout)
# YOUR CODE BELOW
# Database connection
import psycopg2
from psycopg2.extras import RealDictCursor
logger.info(
f"Connecting to database '{rds_host}' on port '{rds_port}' as user '{rds_user}' to database '{rds_database}'"
)
logger.debug("Debug message when creating connection to database")
connection = psycopg2.connect(
host=rds_host,
port=rds_port,
user=rds_user,
password=rds_password,
database=rds_database,
cursor_factory=RealDictCursor,
)
خروجی نمونه برای سطح گزارش به عنوان INFO تنظیم شده است:
__main__: 2024-06-25 06:15:12,171 | INFO | main.py:39 | 61869 >>> Connecting to database 'mydbinstance.cjzjxjzjzjzj.us-west-2.rds.amazonaws.com' on port '5432' as user 'postgres' to database 'postgres'
خروجی نمونه برای سطح گزارش به عنوان DEBUG تنظیم شده است:
__main__: 2024-06-25 06:17:38,664 | INFO | main.py:39 | 62437 >>> Connecting to database 'mydbinstance.cjzjxjzjzjzj.us-west-2.rds.amazonaws.com' on port '5432' as user 'postgres' to database 'postgres'
__main__: 2024-06-25 06:17:38,664 | DEBUG | main.py:42 | 62437 >>> Debug message when creating connection to database
مثال با خروجی json
استفاده از وابستگی پایتون-json-لاگر
logger = logging.getLogger(__name__)
# Change this level according to your needs
logger.setLevel(level=os.getenv("LOG_LEVEL", "INFO"))
logger.propagate = False
log_handler = logging.StreamHandler(stream=sys.stdout)
# Default level for root logger is NOTSET which means all messages will be logged
# https://docs.python.org/3/library/logging.config.html
# stdout.setLevel(logging.DEBUG)
fmt = "%(name)s: %(asctime)s | %(levelname)s | %(filename)s:%(lineno)s | %(process)d >>> %(message)s"
formatter = jsonlogger.JsonFormatter(fmt=fmt)
log_handler.setFormatter(fmt=formatter)
logger.addHandler(log_handler)
{"name": "__main__", "asctime": "2024-07-01 15:28:07,119", "levelname": "INFO", "filename": "main.py", "lineno": 42, "process": 60945, "message": "Connecting to database 'mydbinstance.cjzjxjzjzjzj.us-west-2.rds.amazonaws.com' on port '5432' as user 'postgres' to database 'postgres'"}
{"name": "__main__", "asctime": "2024-07-01 15:28:07,119", "levelname": "INFO", "filename": "main.py", "lineno": 207, "process": 60945, "message": "Starting execution..."}