Python日志记录赢得了';无法写入文件
因此,我使用了一个异常日志记录模块,我找到了这个模块,并对其进行了一些调整。但我似乎不明白为什么它不会创建一个文件并写入它 这是我的模块:Python日志记录赢得了';无法写入文件,python,exception,error-logging,Python,Exception,Error Logging,因此,我使用了一个异常日志记录模块,我找到了这个模块,并对其进行了一些调整。但我似乎不明白为什么它不会创建一个文件并写入它 这是我的模块: """Exception logging""" import sys import traceback import logging logger = logging def setup_logging_to_file(): logger = logging.basicConfig( filename='error_log.txt',
"""Exception logging"""
import sys
import traceback
import logging
logger = logging
def setup_logging_to_file():
logger = logging.basicConfig( filename='error_log.txt',
filemode='w',
level=logging.DEBUG,
format= '%(asctime)s - %(levelname)s - %(message)s',
)
def log_exception(e):
logger.error(
"Function {function_name} raised {exception_class} ({exception_docstring}): {exception_message}".format(
function_name = extract_function_name(), #this is optional
exception_class = e.__class__,
exception_docstring = e.__doc__,
exception_message = e.message))
def extract_function_name():
tb = sys.exc_info()[-1]
stk = traceback.extract_tb(tb, 1)
fname = stk[0][3]
return fname
我在启动时运行setup\u logging\u to_file()
,然后每当遇到异常时,我调用log\u exception
并将异常传递给它,但它甚至不会创建error\u log.txt
文件
from app.exception_logging import log_exception, setup_logging_to_file
def myFunc():
try:
....
except Exception as ex:
log_exception(ex)
正如评论中所建议的,您可以直接访问日志记录 工作示例,名为logtest.py的文件:
"""Exception logging"""
import sys
import traceback
import logging
logging.basicConfig( filename='/tmp/error_log.txt',
filemode='w',
level=logging.DEBUG,
format= '%(asctime)s - %(levelname)s - %(message)s',
)
def log_exception(e):
logging.error(
"Function {function_name} raised {exception_class} ({exception_docstring}): {exception_message}".format(
function_name = extract_function_name(), #this is optional
exception_class = e.__class__,
exception_docstring = e.__doc__,
exception_message = e.message))
def extract_function_name():
tb = sys.exc_info()[-1]
stk = traceback.extract_tb(tb, 1)
fname = stk[0][3]
return fname
目标文件:
from logtest import log_exception
try:
open("somthingnotthere",'r')
except Exception as ex:
log_exception(ex)
我也有同样的问题。最后,我决定做以下事情:
import logging.config
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
handlers=[
logging.FileHandler("log_file.log"),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
logger.info('message')
logger.error('message')
然后在代码中,您可以按如下方式使用记录器:
import logging.config
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
handlers=[
logging.FileHandler("log_file.log"),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
logger.info('message')
logger.error('message')
您应该删除
logging.basicConfig
的format
参数上的额外逗号。另外,当调用log\u exception()
时,logger
是对logging
的引用,而不是setup\u logging\u中使用的logger
变量,因为全局变量是“只读的”。应该使用函数参数。另一方面,我不明白您为什么要编写logger=logging
:只需使用logging
启动时调用setup\u logging\u to\u file
是什么意思?你从哪里调用它?我想创建一个项目范围的日志模块,这样我就可以在我的任何try/catch块中调用log\u exception
函数。当我启动我的项目时,我调用setup\u logging\u to_file()
来初始化我的logger变量,但我改变了@Loïc G saidI将我的所有日志记录都记录在它自己的python文件中的做法,这样在我的项目中,我就可以调用所有try/catch块中的函数,并用两个文件显示示例。您真正做错的是在setup_logging_to_file函数中。如果你想使用这个功能。您需要将logger对象作为参数传入。