Twiggy的是一个早期项目,以建立一个更Python日志记录包。
用法:
使显示器工作:
>>>进口SYS; sys.stderr即可= sys.stdout替换
安装很简单
在您的main.py:
>>>进口的Twiggy
>>> twiggy.quick_setup()
日志信息
>>>从Twiggy的进口*
主界面是魔日志:
>>>日志#doctest:+省略号
<在0X ...... twiggy.Logger.Logger对象>
它的工作原理开箱即用,使用标准的水平:
>>> log.debug(“你可能不关心”)
DEBUG:你可能不关心
>>> log.error(“OMFG!着火了裤子!”)
错误:OMFG!裤子着火了!
它支持多种格式的字符串,默认为新的样式:
>>> log.info(“我穿{0}我{}在哪里','裤',其中='腿')
信息:我穿的裤子我的腿
旧式工作正常,但:
>>> log.options(样式='百分比')。信息(“我喜欢%s”的,“自行车”)
信息:我喜欢自行车
因为这样做的模板:
>>> log.options(样式='美元')。信息('$什么杀',什么='汽车')
INFO:汽车杀死
您可以命名您的伐木者:
>>> mylog = log.name('阿尔弗雷多“)
>>> mylog.debug('你好')
DEBUG:阿尔弗雷多:你好
但名字没有任何关系的对象;它只是供人类使用:
>>> mylog是log.name(“阿尔弗雷多”)
假
上发出消息
发射器松散耦合:
>>> twiggy.emitters #doctest:+省略号
{'*':
您可以设置一个发射器min_level:
>>> twiggy.emitters ['*']。min_level = twiggy.Levels.INFO
>>> log.debug(“帮助,帮助我被压抑”)
>>> log.info(“我不是很死呢”)
信息:我不是很死呢
你可以过滤正则表达式,或者任意函数:
>>> twiggy.emitters [“*”]。滤波器=“*裤子。*”
>>> log.info(“我得到了{0}上”,“裤子”)
信息:在得到了我的裤子
>>> log.info(“我得到了{0}上”,“衬衫”)
让我们重置所有:
>>> twiggy.emitters ['*'。过滤=真
>>> twiggy.emitters ['*']。min_level = twiggy.Levels.DEBUG
更好的输出
换行默认情况下抑制;可每个消息被关闭:
>>> log.info(“用户 ninput nannoys NUS”)
信息:用户 ninput nannoys 新加坡国立大学
>>> log.options(suppress_newlines = FALSE).INFO('我们ndeal“)
信息:我们
合同
例外的前缀。也可以通过exc_info。使用' N'作为前缀折叠成一行:
>>>试试:
... 1/0
...除了:
... log.trace('错误')警告(“哦无”)#doctest:+省略号
警告:哦,反对者占多数
TRACE回溯(最新最后调用):
跟踪文件“<文档测试notes.txt [...]>”,2号线,在
TRACE 1/0
TRACE ZeroDivisionError:由零整数除法或者模
方法链接
我喜欢这种风格的链接了很多。
>>> log.name(“贝尼托”)。信息('你好')
信息:贝尼托:您好
它使结构化日志记录简单:
>>> log.fields(路径= 42).INFO('散步')
信息:路径= 42:散步
捷径。伟大的运行统计数据收集。
>>> log.struct(路径= 42,海豚='感恩')
INFO:海豚=感谢:路径= 42:
结合部分可以为web应用是有用的:
>>> per_request_log = log.fields(REQUEST_ID =“12345”)
>>> per_request_log.fields(行= 100,用户='坦率')。信息('frobnicating数据库“)
INFO:REQUEST_ID = 12345:行数= 100:用户=坦诚:frobnicating数据库
>>> per_request_log.fields(字节= 5678).INFO('发送页面到管“)
信息:字节= 5678:REQUEST_ID = 12345:在管发送页面
链式风格是真棒:
>>> log.name('donjuan“)。字段(裤='性感')。信息(”你好,{}谁想要什么{}?“,谁='名媛',是什么='舞')
信息:donjuan:裤子=性感:你好,各位想跳舞吗?
动态!
在args /字段中的任意函数的调用和值取代的:
>>>进口OS
>>>从twiggy.lib进口thread_name
>>> thread_name()
“MainThread”
>>> log.fields(PID = os.getpid).INFO(“我在线程{0}”,thread_name)#doctest:+省略号
信息:PID = 1076:我在线程MainThread
这可能是有用与局部结合的伐木工人,这让我们做一些很酷的东西:
>>>类ThreadTracker(对象):
... DEF __init __(个体经营,OBJ):
...自我.__ OBJ = OBJ
...#一个部分绑定的记录器
...自我.__登录= log.name(“跟踪”)。字段(obj_id = ID(OBJ),线程= thread_name)
...自我.__ log.debug(“开始跟踪”)
... DEF __getattr __(个体经营,ATTR):
...自我.__ log.debug(“访问{0}”,ATTR)
...返回GETATTR(个体经营.__ OBJ,ATTR)
...
>>>类束(对象):
通...
...
>>>富=一束()
>>> foo.bar = 42
>>>跟踪= ThreadTracker(富)
DEBUG:追踪:obj_id = 14063980:螺纹= MainThread:开始追踪
>>> tracked.bar
DEBUG:追踪:obj_id = 14063980:螺纹= MainThread:访问栏
42
>>>进口螺纹
>>> T = threading.Thread(目标=拉姆达:tracked.bar * 2,名称=“TheDoubler”)
>>> t.start()
DEBUG:追踪:obj_id = 14063980:螺纹= TheDoubler:访问栏
如果你真的想记录一个可调用,再版(),它或把它包在lambda。
优化
作为一种优化,一个min_level可以在记录器设置:
>>> mylog.min_level = twiggy.Levels.INFO
>>> mylog.info(“你看这”)
信息:阿尔弗雷多:你看这
>>> mylog.debug(“这是隐藏的”)
他们还采取在运行一个format_spec过滤器。用例有效地切断特定消息的是做一些愚蠢的库:
>>> mylog.filter =拉姆达S:“有心计”不属于S
>>> mylog.info(“启动愚蠢”)
信息:阿尔弗雷多:启动愚蠢
>>>为我的xrange(3):#为3个大值
... mylog.info(“我叫鬼把戏!”)
>>> mylog.info(“结束愚蠢”)
信息:阿尔弗雷多:结束愚蠢
要求:
- 在Python的
评论没有发现