python交互模式中换行_在Python日志模式中禁止换行

新行\n插入到StreamHandler类中。

如果您真的设置了修复这个行为,那么这里有一个例子说明我是如何通过logging.StreamHandler类中的monkey patching方法解决这个问题的。A monkey patch is a way to extend or modify the run-time code of dynamic languages without altering the original source code. This process has also been termed duck punching.

这里是省略换行符的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(...),因此如果您使用多个日志类,那么此修补程序也将影响其他日志类!

查看以下内容以进一步阅读:

希望能有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值