多进程环境python logging打印日志混乱问题

Python011

多进程环境python logging打印日志混乱问题,第1张

解决办法如下:

多么痛的领悟,困扰了这么久的问题其实就是一个参数配置错了。

fileMode:表示日志文件的打开方式。w-直接写,使用这个配置当系统重启的时候日志会清空,一个进程打开后其他进程是无法使用的;a-尾部追加,大家都可以打开往文件结尾进行追加写入。

本人主语言是java,转到python后日志这块踩了几个坑。再说说另外一个坑,就是异常堆栈的打印问题,在java中logger是可以使用error直接打印出来的。在python中error跟其他日志记录方法没太大差别,是无法打印异常堆栈的,打印堆栈请使用 logger.exception("异常说明", e) 。

在 Python 中,raise 语句用于抛出一个异常。在 raise 语句之前的 print 语句会在抛出异常之前执行,如果你在使用 raise 语句时发现 print 语句没有显示,那么可能是因为 raise 语句之后的代码没有被执行。

举个例子,如果你有如下代码:

def foo():

print("before raise")

raise Exception("error")

print("after raise")

foo()

那么在执行 foo 函数时,会先打印 "before raise",然后抛出 Exception 异常,因此 "after raise" 不会被打印出来。

如果你希望在抛出异常之前打印出相应的信息,建议使用 try-except 语句来捕获异常,在 except 块中打印信息。这样,就可以保证在抛出异常之前,所有的代码都会被执行。

例如,可以使用如下代码来捕获异常:

def foo():

try:

print("before raise")

raise Exception("error")

print("after raise")

except Exception as e:

print("error:", e)

foo()

在这种情况下,执行 foo 函数时会先打印 "before raise",然后抛出 Exception 异常,最后打印 "error: error"。

捕捉异常可以使用try/except语句。

try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

如果你不想在异常发生时结束你的程序,只需在try里捕获它。

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。

如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。

如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。