为什么要用log4j替代System.out.println?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jnshu_it/article/details/86215071

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

【为什么要用log4j替代System.out.println? 】

大家好,我是IT修真院上海分院第2期的学员蒋新益,一枚正直纯洁善良的JAVA程序员

今天给大家分享一下,修真院官网JAVA任务一,深度思考中的知识点——为什么要用log4j替代System.out.println?

1.背景介绍

在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。

最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类 来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。

在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外, Apache 为我们提供了一个强有力的日志操作包 -Log4j

Log4j 是 Apache 的一个开放源代码项目,通过使用 Log4j ,我们可以控制日志信息输送的目的地是控制台、文件、 GUI 组件、甚至是套接口服 务器、 NT 的事件记录器、 UNIX Syslog 守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就 是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

2.知识剖析

关于log4j需要知道以下几点

log4j的配置文件有以下三个方面的内容

1 、根目录(级别和目的地);

2 、目的地(控制台、文件等等);

3 、输出样式

根目录(级别和目的地)

log4j.rootLogger = [ level ] , appenderName, appenderName, …

官方推荐使用的level有四种,从低到高分别是debug,info,warn,error

appenderName是目的地的参数名

目的地(控制台、文件等等)

log4j.appender.appenderName = fully.qualified.name.of.appender.class

log4j提供了5种输出目的地

配置日志信息的格式

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

log4j提供以下四种格式

3.常见问题

1.log4j是通过什么加载的?

2.为什么error了还不停止

3.为什么要用Log4j来替代System.out.println

4.rootcategory和rootLogger有什么区别

4.解决方案

LOG4J是通过什么加载的?

应用程序启动时,默认情况下会到src目录下寻找log4j.xml配置文件,若不存在,会继续寻找log4j.properties文件,只要找到其中一个就会加载该配置文件内容

当然也可以手动加载,因为自动加载只会加载log4j.xml或者log4j.properties,如果有不是这个名字或者没有放在根目录中的配置文件需要手动加载

为什么ERROR了还不停止

因为log4j中其实不止4种级别,而是7种

为什么要用LOG4J来替代SYSTEM.OUT.PRINTLN

程序员经常会遇到脱离java ide环境调试程序的情况,这时大多数人会选择使用System.out.println语句输出某个变量值的方法进行调试。这样会带来一个非常麻烦的问题:一旦哪天程序员决定不要显示这些System.out.println的东西了就只能一行行的把这些垃圾语句注释掉。若哪天又需调试变量值,则只能再一行行去掉这些注释恢复System.out.println语句,调试代码充斥在逻辑代码中间,既不美观也不利于查找

log4j很好地处理了这一问题,并且system.out只能输出到控制台,而log4j之类的日志工具可以配置输出目标,输出等级,减少输出形式与程序的耦合

ROOTCATEGORY和ROOTLOGGER有什么区别

其实rootLogger是rootcategory的子类,rootcategory是旧的写法

5.编码实战

为什么要用Log4j来替代Sys.out_腾讯视频

6.扩展思考

为什么要使用SLF4J而不是Log4J?

SLF4J:即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。

7.参考文献

参考三:博客

参考二:csdn anlina_1984

参考三:知乎

8.更多讨论

1.Log4j和Log4j2的区别

log4j是通过一个.properties的文件作为主配置文件的,而现在的log4j 2则已经弃用了这种方式,采用的是.xml,.json或者.jsn这种方式来做log4j只需要引入一个jar包即可,而log4j 2则是需要2个核心

log4j想要生效,我们需要在web.xml中进行配置

log4j2.xml放到工程resource目录下就行了,大家记住一个细节点,是log4j2.xml,而不是log4j.xml,xml名字少个2都不行

最关键的最大的不同,那就是配置文件的区别了,大家具体使用的时候再根据你的情况进行配置就行了

2.怎么在不注释的情况下关闭log4j

通过控制台选项

ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。

3.xml配置文件和properties的配置文件

properties是简单的键-值对应。

如果properties不能满足你的要求了,你自然就需要用xml了。

xml可以保存多属性的复杂对象结构。

ppt


今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

作者:蒋新益

链接:http://www.jnshu.com/login/1/15188308

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



作者:深夏夏夏夏
链接:https://www.jianshu.com/p/87276710eb79
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

更多内容,可以加入IT交流群565734203与大家一起讨论交流

这里是技能树·IT修真院:https://www.jnshu.com,初学者转行到互联网的聚集地

猜你喜欢

转载自blog.csdn.net/jnshu_it/article/details/86215071
今日推荐