我正在编写一些想要与我的团队共享的脚本,因此我一直在构建一堆日志记录,以便在他们在某个地方遇到崩溃时更容易进行调试,从那时起我就可以看到到底发生了什么崩溃。
一般记录到文件没有问题,但我有一个未捕获的异常问题。我尝试了各种方法来使其正常工作,例如参见this和this。当我从 IDLE 或命令提示符运行它时,似乎 sys.excepthook 没有被调用。
昨天,如果异常发生在主模块中,它会正确记录,但如果异常发生在导入的类中,则不会正确记录。现在异常根本不会被记录,我不知道我改变了什么(所以我今天安装了 Git :-P)
这是我试图开始工作的代码,即主模块:
import tkinter as tk
import sys
import traceback
import logging
import datetime
import exception_logging_test_imported_class as impclass
# Main Class
class ExceptMain(tk.Frame):
def __init__(self, parent):
logging.info('Start main')
tk.Frame.__init__(self, parent, relief='groove', bd=4)
self.parent = parent
self.pack()
tk.Label(self, text='This is the main class', bg='white').pack()
tk.Button(self, text='Start subframe', command=self.run).pack()
tk.Button(self, text='Throw main exception', command=self.throwex).pack()
tk.Button(self, text='Start imported class', command=self.start_import).pack()
# Function to start another frame, from this same file
def …Run Code Online (Sandbox Code Playgroud) 我正在使用python编写一个守护进程服务器,有时会出现python运行时错误,例如某些变量类型不正确.该错误不会导致进程退出.
我可以将这样的运行时错误重定向到日志文件吗?
下面的脚本是将所有错误写入日志文件和控制台,除了引发的异常,它只写在控制台而不是日志上.如何让它将引发的异常写入日志,或任何运行时异常?谢谢.
import os
import sys
import logging
import logging.config
class Main(object):
@staticmethod
def main():
logging.config.fileConfig("logging.conf")
logging.debug("1")
logging.info("2")
logging.warn("3")
logging.error("4")
logging.critical("5")
raise Exception("test")
if __name__ == "__main__":
Main.main()
import logging
import logging.config
logging.config.fileConfig('logging.conf')
# create logger
logger = logging.getLogger('simpleExample')
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
raise Exception("Exception raised")
Run Code Online (Sandbox Code Playgroud)
配置文件:
[loggers]
keys=root,simpleExample
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0
[handler_fileHandler]
formatter=simpleFormatter
args=('error.log')
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=%(asctime)s - …Run Code Online (Sandbox Code Playgroud)