برنامه نویسی

پایتون لاگر – انجمن 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..."}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا