logger异常日志要点总结

Logger异常日志,企业项目中非常重要的一步,在系统调试、出错时,能够快速排查,修复。以下是关于异常日志使用的关键点。

1、真正有意义的Logger

一些用户异常信息,是返回到View层显示给用户看的,那么在前端可能就能够完成处理(例如:提示两次输入的密码不一致),要么根本不是异常(例如:提示用户没有注册)。这样的用户异常不应该出现在异常日志中,而需要记录的是技术性异常(例如:“服务器编译文件未找到”),反映真正有意义的异常到logger中。

2、察觉需要捕获异常的代码块,进行捕获
后端在进行数据更新的时候, updat/savae、insert、delete没有正确执行,此时,用try…catch去捕获异常。

//使用日志类logger
import org.apache.log4j.Logger;

public class ActAreaServiceImpl implements ActAreaService{
//在编写类时,得到ActAreaServiceImpl.class产生的异常日志
    private static final Logger logger = Logger.getLogger(ActAreaServiceImpl.class);
...

    try{
    //可能抛出异常的代码
    //Service层多数情况是 updat/savae、insert、delete没有正确执行
    }catch(Exception e) {
        //捕获异常并在日志中打印出来
       logger.error(e.getMessage(), e);
}

3、合理使用Logger框架的异常信息输出方法
运行中异常,错误信息异常,debug调试异常,Root时异常,了解、知道和会使用在常用的异常方法。
一般是logger.error()。

4、异常追踪堆栈的关键信息
异常框架在处理异常时,会保证打印输出所有相关的堆栈追踪信息,异常的所有原因记录在日志文件中,所以在调试代码时,最上层的异常就是程序异常的起因,这个信息是最重要的。

5、错误:记录日志后又向外抛出
记录日志后又重新抛出异常叫做——异常反模式(anti-pattern),不要这么做,冗余重复。

    try{
    ...
    } catch (Exception e) {
            logger.error(e.getMessage(), e);
            throw new RuntimeException(e.getMessage());
        }

6、任何时候都不要使用System.out或者System.err记录来记录logger
Java发展至今,已经有非常多的日志框架了,要相信成熟的架构体系的异常处理。不成熟的程序员异常处理会有很多逻辑漏洞,不合理的地方,使用框架比你自己处理要更好。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当我们进行单元测试时,有时候我们需要测试一些代码中的日志记录逻辑,这时候就可以使用mock来模拟日志记录器(Logger)的行为。如果我们想测试一个函数,该函数中有记录日志的代码,我们可以使用mock来模拟Logger的行为,并判断是否正确地记录了日志。 下面的例子是一个记录日志的函数: ```python import logging def my_func(): try: # some code here except Exception as e: logging.error(f"An error occurred: {e}") ``` 要测试这个函数,我们需要使用mock来模拟Logger的行为。使用mock可以让我们控制Logger的行为,例如: 让Logger记录日志、不记录日志、记录错误级别的日志等等。 下面是一个使用mock测试Logger异常的例子: ```python import unittest from unittest import mock import logging def my_func(): try: # some code here except Exception as e: logging.error(f"An error occurred: {e}") class TestMyFunc(unittest.TestCase): def test_my_func_logs_exception(self): # create a mock logger mock_logger = mock.Mock(spec=logging.Logger) # replace the global logger with the mock logger logging.getLogger = mock.MagicMock(return_value=mock_logger) # call the function that logs an exception my_func() # assert that the logger's error method was called once mock_logger.error.assert_called_once() ``` 在这个例子中,我们使用了unittest模块和mock模块来对my_func()函数进行测试。我们首先创建了一个mock日志记录器(mock_logger),接着使用mock模块的MagicMock()方法来替换全局的日志记录器(logging.getLogger),让其返回我们创建的mock_logger。 然后,我们调用my_func()函数,这时候会触发mock_logger.error()方法的调用,我们可以通过assert_called_once()方法来判断该方法是否被调用了一次。 这就是mock测试Logger异常的例子。使用mock可以让我们在测试中模拟各种场景,包括模拟日志记录器的行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值