关于日志的123

写在前面:

    关于日志其实有很多想说的,不过将自己整理的文档转化为Blog还是比较花时间的,偶有疏漏,请多包涵。

    本篇文章所讲均只止于Java。

 

日志的作用:

    1.定位问题,对于一个系统而言,总是会有些意外发生,例如系统接口被抓,被薅羊毛,如果在方法内部记录好日志,那么就可以定位问题发生的位置、原因、事故对象。

    2.性能优化,对于一些报表或者其他占用IO比较大的业务,通过日志可以进行详略得当的优化,这在开发时间比较紧的时候,能够排出先后顺序,对于抢占排期有至关重要的作用。

 

常用日志级别:

    1.INFO:对于系统运行期的数据进行记录,合格INFO信息应该对于具有高需求的数据进行记录,如金额、积分变化,用户的个人数据等。另外对于改变应用状态的信息也应该记录,例如数据库更新,其他系统交互等。

    2.DEBUG:对于系统开发时,测试的数据进行记录,有些时候我们调试的数据并不好找,可以考虑通过Debug的日志信息进行定位,这些不好找的信息包括:其他系统交互,线城池调用等。

    3.ERROR:这个级别的信息必须被处理,一般情况下,出现这种信息都会造成系统功能瘫痪。

    4.WARING:这个级别的信息可以忍受,但是应该被关注,在有时间的时候,进行业务评估,考虑是否需要修复处理。

    以上是常用的四个日志级别,另外还有TRACE等没有介绍,在日常使用时,不同级别的日志最好输出到不同的目录当中,按照日期分类这样在排查问题时会非常有效。

 

日志的使用:

    1.日志对象的生成:统一使用工厂方式创建对象,减少资源开销并防止意外篡改。

    2.日志的使用:

        推荐使用Slf4j,他的可变参数对于提升性能和减少书写非常有作用,此外推荐插件Lombok,不仅可以通过@Slf4j省去创建日志对象的烦恼,同时可以节省Pojo的构造函数创建以及getter/setter方法。

        必须注意,如果使用了Lombok,必须保证其他开发者也装了这个插件,不然会造成毁天灭地的后果。

    3.注意:

        3.1.debug/info级别的信息,如果业务较复杂,必须添加 isXxxEnabled() 判断,可以减少日志的无效输出,提升效率。

        3.2.error和warn级别的信息,如果导致业务不正常,使用error,如果错误可预期,使用warn。

        3.3.异常捕获之后应该处理,也就说,打印错误信息。捕获异常范围过大和捕获不处理,都是非常不负责任的行为。

        3.4.敏感信息接口应该记录日志。

        3.5.日志信息打印要防止因为打印信息问题而导致的报错,例如NullPointerException。

        3.6.日志的分类很重要,应该避免将所有日志输出到一个文件里;同时,日志中的信息应该脱敏并且尽量清晰明了,过于冗余和过于简单都是不可取的。

 

总结:

    好的日志可以帮助我们快速定位问题,在系统性能优化中提供可靠的数据帮助分析,在日常开发中,我们应该对于日志信息有更多地重视。本文仅仅是一篇入门级的简要概述,以期起到抛砖引玉的作用。在日常开发中,日志还有很多需要注意的地方,比如参数化的多参数支持,日志的具体业务分类,这些因应个人环境不同,会有不同的变化。

   希望这篇文章能对阅览的你产生帮助,下期见。

转载于:https://www.cnblogs.com/shxz/p/9979628.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

研究显示每天工作超8小时得心脏病概率增加80%,生命很重要,工作不要那个累。

每天工作超过8小时的人患心脏病的风险最高可增加80%(资料图) 据英国《每日邮报》9月12日报道,芬兰职业保健研究所的科学家们近日进行了一项研究,他们发现每天工作超过8小时的人患心脏病的风险最高可增加80%。 研究人员表示,长时间的工作是许多…

SVN介绍

1.SVN介绍SVN是一个跨平台的开源的版本控制系统,svn版本管理工具管理着随时间改变的各种数据,这些数据放置在一个中央档案库(repository)中,svn会备份并记录每个文件每一次的修改、更新、变动。这样可以把任意一个时间…

记录 Annotation processing is not supported for module cycles.

报错:Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [A,B] are excluded from annotation processing 我是想启动两个 maven工程,相互作为服务提供方和消费方,于是在p…

沉淀再出发:Spring的架构理解

沉淀再出发:Spring的架构理解 一、前言 在Spring之前使用的EJB框架太庞大和重量级了,开发成本很高,由此spring应运而生。关于Spring,学过java的人基本上都会慢慢接触到,并且在面试的时候也是经常遇到的,因为这个技术极…

用Python进行机器学习所需环境的配置(转)

源:用Python进行机器学习所需环境的配置

成功创业者所需的能力

1. 富有远见,乐在其中。 如果你能很好地预见自己的公司所在领域在很多年后的样子,这能保证你在该领域取得长久的发展。很多人能在商业领域取得成功并不是因为他们彻底的废旧立新,而是因为他们乘风破浪,能在现有的基础上有所改进和…

记录:non-compatible bean definition of same name and class [com.XXX.XXX]

启动 springBoot 工程时报错: Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name userLogAspect for bean class [com.foreveross.security.config.UserLogAspect] conflicts with existing,…

「日常训练」 Genghis Khan the Conqueror(HDU-4126)

题意 给定\(n\)个点和\(m\)条无向边(\(n\le 3000\)),需要将这\(n\)个点连通。但是有\(Q\)次(\(Q\le 10^4\))等概率的破坏,每次破坏会把\(m\)条边中的某条边的权值增大某个值,求\(Q\)次破坏每次将…

数学家吴文俊批判“中国式奥数”:害人害数学

奥数震动了两位最高科技奖得主 一谈起“奥数”,国内当今数学界的泰斗级人物吴文俊院士就急了。 他在沙发上挺直了腰,瞪大眼睛,伸出手掌指指点点:“是害人的,害数学!” “什么奥林匹克?没这回事&…

CentOS 7 搭建CA认证中心实现https取证

CA认证中心简述CA :CertificateAuthority的缩写,通常翻译成认证权威或者认证中心,主要用途是为用户发放数字证书功能:证书发放、证书更新、证书撤销和证书验证。作用:身份认证,数据的不可否认性端口&#x…

简单明了 - Git 使用超详细教程

见:http://www.admin10000.com/document/5374.html 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统。 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的&…

FileStream功能被禁用

今天还原数据库,遇到如下问题: 网上的解决方法大概是三种: 1、讲数据库备份文件权限设置为“EventOne” 2、打开SQLServer配置管理器,选中服务然后右击“属性”将FileStream相关勾选并重启当前实例服务 3、设置数据库访问级别 USE…

btree索引和hash索引的区别(待更新)

btreehash用于使用 , >, >, <, < 或者 BETWEEN 运算符的列比较。如果 LIKE 的参数是一个没有以通配符起始的常量字符串的话也可以使用这种索引仅仅能满足"","IN"和"<>"查询

window.parent,top,window.self,parent,opener

2019独角兽企业重金招聘Python工程师标准>>> 在应用有frameset或者iframe的页面时&#xff0c;parent是父窗口&#xff0c;top是最顶级父窗口&#xff08;有的窗口中套了好几层frameset或者iframe&#xff09;&#xff0c;self是当前窗口&#xff0c; opener是用ope…

ALM 中查看某个 test 的更改 history 历史

ALM 中要查看某个 test 更改历史&#xff0c; 需要下面两个表&#xff1a;AUDIT_LOG and AUDIT_PROPERTIES------- Get Test modification history -------- ---- In ALM, 857, if filter out test case named 26169502, check its History. In the history, for the node of d…

编译器vs.代码 谁之过

摘要&#xff1a;编译器是将程序语言编译成机器语言的一种高级程序。如今许多编译器越发智能&#xff0c;在编译不通过的情况&#xff0c;你的代码甚至都无法运行&#xff0c;那么到底是编译的问题还是您的代码问题呢&#xff1f; 许多程序员喜欢抱怨编译器报出的各做错误&…

Android 在 Google 开发者大会上发布了哪些更新? | Google 开发者大会 2018

有哪些新的 Android 系统特性 Google Play 上的 targetVersion 要求 2018年8月 新应用发布必须为26或者更高2018年11月 升级现有应用必须为26或者更高2019年之后 新发布或者升级应用必须为一年内发布的 Android 版本工信部已经出台相应的政策&#xff0c;中国主流的应用市场也已…

两个不同的数据库如何跨库事务

首先我们要明白同一实例&#xff0c;简单来说就是一个ip&#xff0c;如果两个数据库位于同一个ip&#xff0c;就是同一实例。其实实例并不相当于ip&#xff0c; 他其实相当于服务&#xff0c;也就是serve。 这样的两个或多个就可以跨库事务&#xff0c;比如 begin; insert in…

链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)

参考http://www.cnblogs.com/TenosDoIt/p/3666585.html 插入排序&#xff08;算法中是直接交换节点&#xff0c;时间复杂度O&#xff08;n^2&#xff09;,空间复杂度O&#xff08;1&#xff09;&#xff09; 1 class Solution {2 public:3 ListNode *insertionSortList(Lis…

zookeeper使用和原理探究

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 zookeeper介绍 zookeeper是一个为分布式应用提供一致性服务的软件&#xff0c;它是开源的Hadoop项目中的一个子项目&#xff0c;并且根据…