其中一个设计的反面教材 -- Log4J
我忘记这个家伙到底有多大了, 但是我用C语言来表达,就是这样:
#define LOG_INFO 1 #define LOG_NOTICE 2 #define LOG_DEBUG 4 #define LOG_FATAL 8 #define LOG_ALL 15 #define D_PRINTF(fmt,arg...){ if((g_debug_level|LOG_FATAL )& fmt){ fprintf(stderr,arg); } }可以强制LOG_FATAL打印, 如果应用程序员写入日志,定向stderr即可. 可以指定 log level,用于控制运行时是否输出日志.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
log4j是有一些反应OO和设计模式设计思想的东西在里面。但这不是他里面类多和包大的根本原因。我觉得宏哥说的太绝对了。往简单的说功能确实是。因为log4j定位是给别人用的做功能支持,他必须要适应不同的需求,比如不同的配置方式,不同的输出格式(他不止输出文本行的,也有XML格式),给使用者能够方便扩展的空间,考虑的就相对的更繁琐。
有些时候确实觉得有些开源项目功能太繁琐不想用他自带的包,自己也会写个公司自己用的日志类之类的工具类,就像宏哥范例给的那样确实简单,一两个静态方法搞定,没什么复杂的继承关系,但是是否适合其他公司用,就无法保证了。也许需求变了又要重新写代码。OO和模式理解了确实用的恰到好处的话,确实能解决一些经常变化需求的东西。还是那句话,不能为要用模式而套模式。
一楼那种用日志等级来控制程序的流程,就像是用异常来控制程序的流程一样的,虽然有些时候确实方便了自己,但是后面接手的人看代码的时候就难说了,而且控制流程也不是一开始设计它们的本意。
log4j是有一些反应OO和设计模式设计思想的东西在里面。但这不是他里面类多和包大的根本原因。我觉得宏哥说的太绝对了。往简单的说功能确实是。因为log4j定位是给别人用的做功能支持,他必须要适应不同的需求,比如不同的配置方式,不同的输出格式(他不止输出文本行的,也有XML格式),给使用者能够方便扩展的空间,考虑的就相对的更繁琐。
有些时候确实觉得有些开源项目功能太繁琐不想用他自带的包,自己也会写个公司自己用的日志类之类的工具类,就像宏哥范例给的那样确实简单,一两个静态方法搞定,没什么复杂的继承关系,但是是否适合其他公司用,就无法保证了。也许需求变了又要重新写代码。OO和模式理解了确实用的恰到好处的话,确实能解决一些经常变化需求的东西。还是那句话,不能为要用模式而套模式。
一楼那种用日志等级来控制程序的流程,就像是用异常来控制程序的流程一样的,虽然有些时候确实方便了自己,但是后面接手的人看代码的时候就难说了,而且控制流程也不是一开始设计它们的本意。
log4j是有一些反应OO和设计模式设计思想的东西在里面。但这不是他里面类多和包大的根本原因。我觉得宏哥说的太绝对了。往简单的说功能确实是。因为log4j定位是给别人用的做功能支持,他必须要适应不同的需求,比如不同的配置方式,不同的输出格式(他不止输出文本行的,也有XML格式),给使用者能够方便扩展的空间,考虑的就相对的更繁琐。
有些时候确实觉得有些开源项目功能太繁琐不想用他自带的包,自己也会写个公司自己用的日志类之类的工具类,就像宏哥范例给的那样确实简单,一两个静态方法搞定,没什么复杂的继承关系,但是是否适合其他公司用,就无法保证了。也许需求变了又要重新写代码。OO和模式理解了确实用的恰到好处的话,确实能解决一些经常变化需求的东西。还是那句话,不能为要用模式而套模式。
一楼那种用日志等级来控制程序的流程,就像是用异常来控制程序的流程一样的,虽然有些时候确实方便了自己,但是后面接手的人看代码的时候就难说了,而且控制流程也不是一开始设计它们的本意。
把上面的翻译一下,变成别的语言,log4a、log4b、log4c。。。。成了
下面这2个怎么算?
http://www.oschina.net/p/zlog
http://www.oschina.net/p/log4cplus
你用得太少了。我见过有人用它来控制流程(例如:DEBUG模式访问测试数据库,INFO以上访问正式数据库),哈哈,虽然有点狗血,但是居然很管用。
你用得太少了。我见过有人用它来控制流程(例如:DEBUG模式访问测试数据库,INFO以上访问正式数据库),哈哈,虽然有点狗血,但是居然很管用。