def time_decorator(msg):
"""
Decorates `msg` with current timestamp
Args:
msg(str): The log message from fabric
Returns:
str: Original message prepended with current date time
"""
if "\n" not in msg and msg.strip():
return "[%s] %s" % (time.asctime(), msg)
return msg
# Compose original method inside of decorator
_original_flush = OutputLooper._flush
OutputLooper._flush = lambda self, msg: {
_original_flush(self, time_decorator(msg))
}
@task
def uptime():
run('uptime')
现在不可能了。格式是硬编码的:请参见source。在
仅供参考,有一个proposal在问你到底是什么样的人。在
您可以使用
asctime
设置日志格式,但它不会影响结构输出,只影响paramiko输出:输出示例:
^{pr2}$希望有帮助。在
作为alecxe said,格式是在fabric1.x中硬编码的(在我发布本文时,这是唯一可用的版本)。在
所以我们需要一个解决办法。这是我写的一个相当老套的解决方案,但它依赖于Fabric的未记录部分,这意味着它可能会在将来的版本中崩溃。在
从这一点开始,来自远程计算机的任何输出都将具有时间戳。在
例如,如果没有此代码,
^{pr2}$sudo('echo "test"')
的输出将是:但添加后,您将得到:
你可以利用这个基本的想法来清理它。输出开始处的
sudo
行来自fabric.operations._run_command
,大约是第900行。我不确定你能用什么简单的方法来修改它。在除了替换
_flush()
,我也找不到一种方法来实现这一点。我通常发现在任何类中替换私有方法都是一种冒险的做法,更不用说第三方了。下面是一个装饰Fabric_flush()
方法的解决方案,它还使用本机Pythontime.asctime
方法来格式化时间戳。在通过测试,您的输出应该类似于:
^{pr2}$相关问题 更多 >
编程相关推荐