Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python日志记录赢得了';无法写入文件_Python_Exception_Error Logging - Fatal编程技术网

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对象作为参数传入。