import logging
import sys
log_fmt = 'brbuild: %(message)s'
# Initilaize log here
# TODO may need to flush
logging.basicConfig(filename="logtest",
level=logging.DEBUG,
format=log_fmt,
datefmt='%H:%M:%S',
filemode='a')
# capture stdout to log
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
log_fmt = logging.Formatter(log_fmt)
ch.setFormatter(log_fmt)
logging.getLogger("logtest").addHandler(ch)
logging.info("using logging")
print "using stdout"
逻辑测试
brbuild: using logging
我怎么能得到使用stdout
写在日志中?
这是一种黑客攻击,但是你可以在当前模块中重新定义print
,其他模块可以从foo导入print执行来使用它。
为了简单起见,在那个示例中我没有使用文件句柄,而是使用了stdout/stderr。如果使用文件,仍然可以添加
sys。斯特杜特。将(msg os.linesep)
语句写入新的print
函数。
我的新
print
可能不如原来的print
强大,但它也支持多个参数。
import logging,sys
def print(*args):
logger.info(" ".join([str(x) for x in args]))
if __name__ == '__main__':
logger = logging.getLogger('foo')
logger.addHandler(logging.StreamHandler(sys.stdout))
logger.addHandler(logging.StreamHandler(sys.stderr))
logger.setLevel(logging.INFO)
a=12
logger.info('1. This should appear in both stdout and stderr.')
print("logging works!",a)
(你必须用括号)。结果:
1. This should appear in both stdout and stderr.
1. This should appear in both stdout and stderr.
logging works! 12
logging works! 12
匿名用户
如果您打算将打印
输出重定向(即重定向sys.stdout
)到记录器,或重定向到记录器和标准输出,则需要创建一个类来模拟类文件对象,并将该类文件对象的实例分配给sys。斯特杜特。
相关问题
- Android:在模块jefied-play-services-测量和jefied-play-services-测量-impl中发现重复类
- 如何防止对数组中类对象的重复引用?
- 组件中的Angular 2重复订阅
- 检测变化@角度[重复]中的输入绑定
- angular2@input-更改检测[重复]
- 我们需要在Angular中取消订阅超文本传输协议调用吗?[重复]
- 在-O0 vs-O3中__rdtsc()的汇编代码[重复]
- Python不和谐音乐机器人停止播放任何歌曲几分钟
- Python-延迟后运行异步功能,不阻塞其他代码
- Python不和音乐机器人与歌曲队列
- Gradle不包含要jar的资源文件夹[重复]
- Jlink-包括JavaFX应用程序中包含自定义python脚本的目录
- 线程“main”java. lang.NoClassDefFoundError中的异常:org/apache/log4j/LogManager[重复]
- Python不和谐音乐机器人-创建队列-自动播放下一首歌
- 为什么在发生哈希冲突并且Hashmap不允许重复元素时需要linkedlist?
- 不和Python音乐机器人错误
- 如何修复错误java. lang.ClassNotFoundException:com.mysql.jdbc.Driver[重复]
- 如何查看为C函数生成的汇编代码?[重复]
- PoolingHttpClientConnectionManager不重复使用现有的空闲连接
- 使用java8[重复]按属性对列表对象进行分组