使用全局命名的流,实现虚拟的日志埋点,只有在需要使用日志的时候,定义日志流的具体实现,那些虚的日志埋点,才会真的有意义。
建立虚的日志埋点¶
In [1]:
from naja import *
debug = namedstream('debug')
error = namedstream('error')
bus = namedstream('bus')
In [2]:
for i in range(10):
i>>debug
i*2>>error
In [3]:
debug_in_other_moudel = namedstream('debug')
debug is debug_in_other_moudel
Out[3]:
这里定义debug的具体实现,对error不做处理。
我们对debug日志做两种处理,一是输出到日志文件中,一是打印到屏幕
In [4]:
#输出到文件
import moment
debug.map(lambda x:str(moment.now().datetime)+':::'+str(x)+'\n').sink(write_to_file('/tmp/tmp.log'))
def debug_print(x):
print('debug:',x)
#在屏幕上打印
debug.sink(debug_print)
重新执行前面的代码
In [5]:
for i in range(10):
i>>debug
i*2>>error
可以看到debug有了输出,而error因为没有定义具体实现,所以没有输出
我们再查看日志文件,里面的日志也是ok的
In [6]:
#查看日志文件
open('/tmp/tmp.log').readlines()
Out[6]:
实现钉钉消息发送¶
In [7]:
from Send import DD
In [8]:
dd= DD()
'hello world'>>dd('张建伟')
只要在任何地方将数据压入dd('张建伟')这个流,钉钉都会收到提醒