zoukankan      html  css  js  c++  java
  • Logger日志打印规范

    首先来看一下比较常用的Logger日志级别(部分未列出):

    1. error - 运行期错误日志记录,应该有专门的error日志文件。;
    2. warn - 警告信息,如程序调用了一个即将作废的接口,接口的不当使用,运行状态不是期望的但仍可继续处理等;
    3. info - 有必要的事件信息记录。
    4. debug - 调试信息,业务处理进行状态,当前的变量值等;
    5. trace - 一些更详细的跟踪信息;

    鉴于我们是一个金融系统,流量还是不算很大,我个人认为debug级别和info级别可以统一归为info级别下打印,这是考虑到现在系统稳定性不够,处于一个快速迭代开发的过程中,线上问题可能随时都有,所以将业务流转与部分变量值打印出来还是很有必要的。error记录错误日志,但如果错误是预期会发生的,并且已经有了其他的处理流程,则建议使用warn级别。例如在try-catch中catch块里处理后继续流程的日志记录。

    1.Logger对象的定义:

    <strong>private static final Logger logger = LoggerFactory.getLogger(Test.class);</strong>

    2.日志中不出现计算或方法调用,防止在打印日志的时候报错。

    之前在上家公司的时候就确实出现过因打印日志而系统RunTimeException的,不应该出现。

    3.try-catch如果往外抛出,则不应该打印异常信息。

     
    1.  
      try {
    2.  
          throw new Exception();
    3.  
      } catch (Exception e) {
    4.  
          logger.error("xxxxxx", e);
    5.  
          throw e;
    6.  
      }

    这样的处理解释不合适的,因为抛出去的异常,一般情况下你肯定会记录。(当然如果你不记录,那么我就搞不懂为什么你要抛出去了)。

    4.如何打印error Log

    log.error("xxxxxxxxxxxx", e); 

    这种比较推荐,当然在实际过程中我也看到有同事用了其他的方式,形如:

    logger.error("xxxxxx", e.getStackTrace());

    可以是可以,这种打印出来的stackTrace比较丑。。。用一下你就知道。

    Log4j、Log4j2的源码中对于异常Exception的处理时这样的。

    所以【占位符小于实际的参数数量时会把最后一个设置为Throwable】,即可以正常打印error。

    1.  
      log.error("xxxxxxxxxxxx{}","第一个参数" e); //可以正常打印
    2.  
      log.error("xxxxxxxxxxxx{},{}","第一个参数" e); //不能正常打印,因为占位符和参数数量一样
    1.  
      private void initThrowable(final Object[] params, final int argCount, final int usedParams) {
    2.  
              if (usedParams < argCount && params[argCount - 1] instanceof Throwable) {
    3.  
                  this.throwable = (Throwable) params[argCount - 1];
    4.  
              } else {
    5.  
                  this.throwable = null;
    6.  
              }
    7.  
          }

    5.日志记录建议用英文(这点没有依据)。

    用中文除了占用大点好像没什么不好,但是还是建议用字母。

    6.http请求时应该打印 url ,param, get/post,statusCode,ret,timeUsed等关键字段。

    反正我吃过没打印这些的亏,还不是我写的代码。说出来都是泪。

    7.相对6,别人调用接口的时候应打印 入参,请求用时,返回值,来源等关键字段。

    8.分支流程如果必要再外层打印参数,可以知道具体走了哪个流程。

    转载笔记

    -------------------------------------------------------------------------
    ## 极客时间全网最便宜最优惠购买方式,优惠券返现 百度网盘 微信关注公众号“选门好课”
    扫描下方二维码关注我的公众号"选门好课",与我一起交流知识
  • 相关阅读:
    【sqli-labs】 less26 GET- Error based -All you SPACES and COMMENTS belong to us(GET型基于错误的去除了空格和注释的注入)
    【sqli-labs】 less25a GET- Blind based -All you OR&AND belong to us -Intiger based(GET型基于盲注的去除了or和and的整型注入)
    【sqli-labs】 less25 GET- Error based -All you OR&AND belong to us -string single quote(GET型基于错误的去除了or和and的单引号注入)
    Apache rewrite地址重写
    PHP安装-phpMyAdmin+Discuz
    SElinux解决web网站无法访问
    Squid代理服务部署
    Apache动态加载模块
    Apache虚拟主机+AD压力测试
    nginx php-fpm conf文件编写
  • 原文地址:https://www.cnblogs.com/singworld/p/9673734.html
Copyright © 2011-2022 走看看