Zap实现多logger自定义等级
Zap定义的logger在做等级划分的时候,可以使用AtomicLevel
变量在生成logger的时候,通过zapcore.NewCore(zapcore.NewJSONEncoder(cfg), writer, atomicLevel)
生成一个相应的core去做等级过滤,并且logger的多个core可以配置多个AtomicLevel
变量实现多路多encoder输出不同格式,不同路径的文件,此处不再赘述,只要使用AutomicLevel.SetLevel()
就可以实现core内level的改变,但是在实际使用中,我们需要使用现有logger配置多个不同等级logger,这样可以避免重复生成相同参数的新logger,Zap提供了WithOption()
方法去实现logger的复制与option选项的wrap,但是在此方法中,只提供了IncreaseLevel()
选项,即我们只能对已有logger做升级操作,却并不能对logger进行降级,并且IncreaseLevel()
本质上只是对core做了一层包裹,在实际使用中,依然要进入最底层core判断new的时候传入的level变量的等级做过滤,这对logger的使用造成了很多不便。
于是采用封装的方式重写core的Enabled
,Check
,以及With
函数,并在新复合core中组合一个level变量,使得后续logger的所有等级过滤操作(本质上都是在core的Enabled
和Check
函数中做过滤)全部使用封装的lev