java开发日志怎么写,java怎么看日志

  java开发日志怎么写,java怎么看日志

  至于日志,在大家的印象中是比较简单的。我们只需要引入相关的依赖包,剩下的就是“享受”打印项目中我们需要的信息。但往往越简单的东西越容易被我们忽略,从而导致一些本不该发生的bug。作为一个严谨的程序员,怎么能让这种事情发生呢?所以我们来看看使用日志的正确姿势。

  主体

  日志规范

  名字

  首先,是日志文件的命名。尽量知道自己的名字是什么意思,团队也必须使用统一的命名标准。否则,“脏而乱”的日志文件会影响大家排查问题的效率。这里建议命名为“项目名_日志名_日志类型. log”,这样可以通过名称清楚地知道日志文件属于哪个项目、类型和功能。例如,我们的MessageServer项目中与监控Rabbitmq消费者相关的日志文件名可以定义为“MessageServer _ rabbit MQ consumer _ monitor . log”。

  保留时间

  至于保存日志的时间,普通日志文件建议保存15天。如果比较重要,可以根据实际情况适当延长。具体请参考每台服务器的磁盘空间和日志文件的大小,做出最佳选择。

  日志级别

  的常见日志级别如下:

  调试级别:记录与调试器相关的信息。信息级:记录关于程序正常运行的有意义的信息。警告级别:记录潜在错误的信息。错误级别:记录当前程序错误的信息,需要注意和处理。致命级别:表示发生了严重错误,程序将被中断。

  建议在项目中使用这四个级别,错误、警告、信息和调试。

  正确体位

  1.提前判断日志级别。

  //条件判断if(logger . isdebugenabled){

  logger.debug(服务器信息,id : id ,用户: 用户);

  }//使用占位符logger.debug (serverinfo,id: {},user: {} ,id,user);对于调试、信息级日志,在我们的程序中出现的频率相对较高。当我们的项目比较大,日志比较多的时候,这个时候为了高效的运行程序,就必须通过条件判断或者占位符来打印日志。为什么?如果我们的项目中配置的日志级别是WARN,那么对于下面的日志输出语句 logger.debug (server info,id: id ,user: user);,虽然不会打印日志,但会执行字符串拼接。在这里,我们的用户是一个实例对象,所以我们也将执行toString方法,从而浪费了大量的系统资源。

  2.避免冗余的日志输出。

  在我们的生产环境中,调试日志的输出一般是禁止的,其打印频率很高,容易对正常运行的程序造成严重影响。我们在最近的项目中也遇到了类似的情况。

  那么是时候学习使用可加性属性了。

  Logger name= xx additivity= true 在这里被配置为true,这是默认情况。此时,当前记录器将继承父记录器的Appender。说白了,当前日志的输出除了当前日志文件之外,还会输出到父文件。所以一般情况下,为了避免重复打印,我们会将该参数设置为false,以减少不必要的输出。

  3.确保日志信息完整。

  在我们的代码中,日志记录的内容应该包含异常堆栈。请不要随意输出“XX错误”之类的简单日志,对错误调试没有帮助。所以当我们记录异常时,我们必须带来堆栈信息,比如

  logger.error(rabbitmq消费者错误,原因: e.getMessage(),e);请记住,当您输出一个对象实例时,您必须确保该对象覆盖toString方法,否则只会输出它的hashCode值。

  4.将logger变量定义为static。

  私有静态最终记录器Logger=Logger factory . get Logger(xx . class);确保一个对象只使用一个Logger对象,并避免每次都重新创建它,否则可能会导致OOM。

  5.正确使用日志级别。

  尝试{ //.}catch(xx){

  logger.info(.);

  }这样就把原本是错误的信息都打印在INFO日志文件里了,不知情的同事还是会盯着错误日志看,也发现不了问题,会影响工作效率吧?

  6.推荐slf4j回退组合。

  slf4j的接口已经在logback中实现了,所以不需要引入冗余适配器。而且,logback更有优势。建议新项目可以使用这种组合。还有一点需要注意的是,在引入slf4j的时候,要注意SLF4J实际使用的日志库是不是我们导入的,也有可能是使用了我们第三方依赖包带入的日志库,这就有可能导致我们的日志失效。

  7.日志的汇总分析

  日志聚合可以统一不同服务器之间的日志,以便进行分析和处理。如今,ELK technology stack或EFG (Fluent Elastic Search Grafana)是一些成熟的开源解决方案。

  以ELK为例,可以在我们的服务器上通过logstash直接读取应用程序打印的日志文件,也可以在我们项目的日志配置文件中配置相关的socket信息,打印时直接将日志信息输出到logstash。然后会被elasticsearch存储,被kibana展示。

  相关教程:Java视频教程以上是如何正确使用Java log的细节。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: