如何在Python日志模块中抑制换行符



例如log.info("msg")时,我想取消换行。当我们"打印"它只是

print msg,

所以我需要昏迷之类的东西来记录。

我提出这个问题在Python日志记录模块中抑制换行但有人能给我一个参考或简单的例子吗,比如"你好,世界"谢谢

以下是我对类似问题的回答:

新行n插入到StreamHandler类的emit(...)方法中。

如果您真的想修复这种行为,那么下面是我如何通过在日志中对emit(self, record)方法进行猴子补丁来解决这个问题的例子。StreamHandler类。

monkey补丁是一种在不更改原始源代码的情况下扩展或修改动态语言运行时代码的方法。这个过程也被称为冲鸭。

这里是省略换行符的emit()的自定义实现:

def customEmit(self, record):
# Monkey patch Emit function to avoid new lines between records
try:
msg = self.format(record)
if not hasattr(types, "UnicodeType"): #if no unicode support...
self.stream.write(msg)
else:
try:
if getattr(self.stream, 'encoding', None) is not None:
self.stream.write(msg.encode(self.stream.encoding))
else:
self.stream.write(msg)
except UnicodeError:
self.stream.write(msg.encode("UTF-8"))
self.flush()
except (KeyboardInterrupt, SystemExit):
raise
except:
self.handleError(record)

然后,您将创建一个自定义日志记录类(在本例中,从TimedRotatingFileHandler进行子类化)。

class SniffLogHandler(TimedRotatingFileHandler):
def __init__(self, filename, when, interval, backupCount=0,
encoding=None, delay=0, utc=0):
# Monkey patch 'emit' method
setattr(StreamHandler, StreamHandler.emit.__name__, customEmit)
TimedRotatingFileHandler.__init__(self, filename, when, interval,
backupCount, encoding, delay, utc)

有些人可能会争辩说,这种类型的解决方案不是Python,或者其他什么。可能是这样,所以要小心。

此外,请注意,这将对SteamHandler.emit(...)进行全局修补,因此,如果您使用多个日志记录类,则此修补程序也会影响其他日志记录类!

希望能有所帮助。

这是不可能的(如果没有对日志模块的严重黑客攻击)。如果您必须具有此功能,请分部分构建日志记录字符串,并在准备好用换行符显示日志消息时将其记录下来。

最新更新