# log_module.py
import logging
import inspect
import os
class StandardLogger:
def __init__(self, log_file='my_log.log'):
# log_file根据项目实际情况设置,建议配置文件获取
self.logger = logging.getLogger("product")
self.logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('【%(asctime)s】【%(levelname)s】【%(name)s】【%(message)s】')
# 写入日志文件
file_handler = logging.FileHandler(log_file)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
self.logger.addHandler(file_handler)
# 写入控制台(可选)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
console_handler.setFormatter(formatter)
self.logger.addHandler(console_handler)
def log(self, level, message):
frame = inspect.stack()[1]
module = inspect.getmodule(frame[0])
file_path = os.path.abspath(module.__file__)
function_name = frame[3]
line_number = frame[2]
log_message = f"File: {file_path}, Function: {function_name}, Line: {line_number} {message} "
getattr(self.logger, level)(log_message)
syslog = StandardLogger()
可在其他模块调用
# test_log.py
from log_module import syslog
def info():
syslog.log("info", "This is an info message.")
def warn():
syslog.log("warning", "This is a warning message.")
def error():
syslog.log("error", "This is an error message.")
if __name__ == "__main__":
info()
warn()
error()
调用结果