2019独角兽企业重金招聘Python工程师标准>>>

假设你的log4j系统中有这样的配置

log4j.logger.aa=ERROR, A1
log4j.logger.aa.bb=
log4j.logger.aa.cc=INFO

aa是一个父logger。aa.bb和aa.cc是aa的子logger。

aa.bb继承了aa's等级和输出(appender),等级是ERROR,输出是A1。

aa.cc继承并覆盖了aa的级别。所以aa.cc的等级是INFO输出还是A1。

需求1:如果我现在想把所有的aa的日志,所有的级别,输出到一个特别的文件里面去,并保持原来的aa.bb、aa.cc的输出不变,如何实现?

需求2:假设我动了aa.bb的代码,想在生产上把aa.bb的所有日志,从DEBUG级别开始输出到某个aa.bb.debug.log,而保持aa的ERROR以上级别的日志不动(方便运维人员不改变他们的习惯,直接看原来的日志)

log4j将会如何实现这些需求?很困难,也许要在appender上引入阈值(threshold),或者引入子logger不继承父logger的选项。子logger可以自己指定一个等级,或者从父logger那里继承一个。但说到底,log4j的logger必须有且只能有一个等级,等级和logger是绑定的。

zlog将会如何实现这些需求?首先,zlog继承了syslog配置文件的思想,一个分类的不同等级可以同时存在不同的规则内。这就让过滤同一分类的不同等级的日志到不同日志文件成为可能。

aa.debug         “/var/log/aa.debug.log”
aa.=notice       “/var/log/aa.notice.log”

是不是觉得自由了很多?

其次,在zlog里面,所有的规则之间都是独立的,没有父子关系。纲目分类的关系表现在分类字符串中间的下划线。举例:

#rule 1
aa_bb.DEBUG         “/var/log/aa_bb.log”#rule 2
aa_cc.INFO          “/var/log/aa_cc.log”#rule 3
aa_.ERROR           “/var/log/aa_error.log”#rule 4
aa.*                “/var/log/aa.log”

没有继承,只有4条独立的规则。如果代码里面的分类名是“aa_bb”。代码就像这样:

category_t ab;ab = zlog_get_category(“aa_bb”);ZLOG_DEBUG(ab, “ab's debug”);
ZLOG_ERROR(ab, “ab's error”);

配置中,rule 1的分类字符串”aa_bb”和rule 3的分类字符串”aa_”,与代码中的名字为”aa_bb”的分类变量是匹配的。于是代码中属于aa_bb分类变量、>=DEBUG日志输出到aa_bb.log,属于aa_bb分类变量、>=ERROR会被输出到 aa_error.log。ERROR等级的日志会被同时写在两个文件里面。不过rule 4的变量字符串是”aa”,它不匹配分类变量”aa_bb”,它精确匹配拥有“aa”名字的分类变量。

这就是纲目分类模型。规则和规则之间是分开的。一个代码分类变量可以匹配多个规则分类字符串,一个规则可以属于多个代码分类变量。规则中的纲分类字符串(以下划线结尾的)匹配代码中的目分类变量,纲分类字符串的范围包括了了目分类字符串。这样,用户可以选择任意范围的纲目分类字符串来输出,而不影响其他规则的行为。

事实上,在zlog_get_category()被调用的时候,并不保证代码分类变量一定有相匹配的规则分类字符串。分类变量可以有很多与之匹配的规则,也有可能一条都没有,这取决于配置文件是怎么写的。当配置文件改变并调用zlog_reload()后,代码分类变量和规则分类字符串的匹配会被重新计算。根据上面所说的匹配方式,每个分类变量都会从新的配置文件里面找到自己的新规则。

也就是说,在zlog里面,多输出是由多条规则来实现的,而不是log4j的多个appender。一条规则代表程序员对于某种分类和等级的日志的输出需求。没有必要指定某个分类必须为什么等级。分类、等级、输出这3者可以自由搭配,完全解耦,这样就带来了极大的灵活性。

必须感谢unix系统syslog的设计者,从思想上来说,zlog只是在他们的基础上增加了一点点的改动来匹配纲目分类,但灵活性远超java系列的绑定思想。也许log4j的设计者被继承这两个字晃花了眼,以为继承就是解决一切问题的灵丹妙药……

转载于:https://my.oschina.net/HardySimpson/blog/53183

为什么log4j的概念模型是错的--zlog的模型简介相关推荐

  1. log4j中调试与错误日志分开_idea中log4j日志插件报错

    visual studio code权威指南计算机 65.34元 包邮 (需用券) 去购买 > idea中log4j日志插件报错 在运行测试代码的时候,出现以下错误! 在 src/ main / ...

  2. Egg - 中间件易错点和洋葱模型

    Egg - 中间件易错点和洋葱模型 一. 易错中间件编码 1.1 中间件和洋葱模型 一. 易错中间件编码 废话不多说,我给大家写个Demo: const auth = () => {return ...

  3. Simscape —— 在另一台电脑上打开Simscape模型报错/显示不出模型

    在另一台电脑上打开之前的simscape模型报错无非只有一个原因:路径 解决方法: 1.打开你报错的simscape模型,去到Model Explorer 2.在弹出界面的左边选择Model Work ...

  4. odoo14 | 视图报错:没有找到模型:xxx

    查看报错信息,发现没有找到模型,这不一定是你视图写的有问题,也可能不是你的模型写的有问题,兴许你可能没有在模型初始化文件中注册你新建的模型文件. 现在加上导包后,再返回odoo升级就可以调试视图报错了

  5. dymola学习笔记-第零、一天(报错不能计算“高级”模型,然而我觉得那个模型并不高级,因此所谓2018破解版不灵,还得靠TB)

    引用 东北亚见熊 https://blog.csdn.net/qq_40196524/article/details/97534553 https://blog.csdn.net/qq_4019652 ...

  6. 什么是概念模型 有什么作用 论述网状模型的概念 论述数据库系统的三级模式结构 优点 什么叫数据于程序的物理独立性?什么叫数据与程序的逻辑独立性?为什么数据库系统具有数据于程序的独立性数据库管理员

    数据:描述事物的符号数据库(DataBase,简称DB) 数据库顾名思义,是存放数据的仓库,只不过这个仓库是在计算机存储设备上的, 而且数据是按一定格式存放的 数据库管理员(DateBase Admi ...

  7. Python报错日志:Warnings模块简介

    前言 这两天开始学习机器学习,在完成鸢尾花数据集的模型建立的时候,报出来一大堆的FutureWarning,虽然不影响数据,但是看着十分碍眼,所以使用Wainings模块将其屏蔽掉: from war ...

  8. zlog使用手册,小靠谱啊

    http://hardysimpson.github.io/zlog/UsersGuide-CN.html Chapter 1 zlog是什么? zlog是一个高可靠性.高性能.线程安全.灵活.概念清 ...

  9. 纯C语言日志类库 Zlog

    转自: http://hardysimpson.github.io/zlog/UsersGuide-CN.html 难易 著23 Contents Chapter 1  zlog是什么? 1.1  兼 ...

最新文章

  1. No entry found for dependency in Cartfile.
  2. linux编译redis打包,linux下下载redis,并且编译
  3. 云盾idaas登陆_移动端扫码登录IDaaS平台
  4. 热敏电阻如何查表计算温度_额温枪温补算法:热电堆温度补偿算法 MTP10B7F55
  5. python怎么后撤步_你的后撤步用对了吗? | 后撤步的目的
  6. 收藏!盘点B站up主们最喜欢用的录屏软件!
  7. 真win10官方原版ISO下载方法
  8. 三星n8000平板_三星n8000拆机方法介绍【图解】
  9. PostgreSql 批量修改数据库下所有表 owner
  10. 怎样预防电脑辐射脱发
  11. 简单的三点式腰背肌锻炼方法
  12. 计算机类中文核心期刊简介
  13. c盘减肥//请在阅读本文之前查看你C盘的可用空间
  14. mysql日期转换12小时和24小时_12小时制和24小时制的转换(转)
  15. android系统 视频流录像,Android端海康视频取流,可以实时预览与查看历史录像
  16. RuntimeError: iter() is only supported inside of tf.function or when eager execution is enabled.
  17. 原画师一般用什么软件画画?
  18. 算法之递归回溯(四)
  19. 我只好去找了一根绳子系着它的脖子
  20. 启发式搜索A*算法【引入及思想】

热门文章

  1. java 模板引擎_极简 Spring Boot 整合 Thymeleaf 页面模板
  2. python最基本的规则是关键字吗,Python 关键字
  3. 神策数据:从产品与运营视角,了解教育行业转介绍
  4. 重磅!神策智能推荐获 2019 大数据“星河奖”
  5. 活动 | 5 位大咖,手把手教你玩转数据驱动精细化运营
  6. 桑文锋:创业是场持久战,我希望能重构中国互联网的数据根基
  7. 0、elasticsearch前言
  8. centos平台openstack spice配置
  9. oracle 11g数据库启动错误总结
  10. 未能在给定的程序集中找到任何适合于指定的区域性(或非特定区域性)的资源解决办法...