首页 > 其他分享 >错误日志处理

错误日志处理

时间:2024-01-13 12:35:09浏览次数:29  
标签:HTTP 错误 处理 错误码 日志 最好

左耳听风~摘录

统一分类的错误字典。

无论你是使用错误码还是异常捕捉,都需要认真并统一地做好错误的分类。

最好是在一个地方定义相关的错误。比如,HTTP 的 4XX 表示客户端有问题,5XX 则表示服务端有问题。也就是说,你要建立一个错误字典。

同类错误的定义最好是可以扩展的。

这一点非常重要,而对于这一点,通过面向对象的继承或是像 Go 语言那样的接口多态可以很好地做到。这样可以方便地重用已有的代码。

定义错误的严重程度。

比如,Fatal 表示重大错误,Error 表示资源或需求得不到满足,Warning 表示并不一定是个错误但还是需要引起注意,Info 表示不是错误只是一个信息,Debug 表示这是给内部开发人员用于调试程序的。

错误日志的输出最好使用错误码,而不是错误信息。

打印错误日志的时候,应该使用统一的格式。但最好不要用错误信息,而应使用相应的错误码,错误码不一定是数字,也可以是一个能从错误字典里找到的一个唯一的可以让人读懂的关键字。这样,会非常有利于日志分析软件进行自动化监控,而不是要从错误信息中做语义分析。比如:HTTP 的日志中就会有 HTTP 的返回码,如:404。但我更推荐使用像PageNotFound这样的标识,这样人和机器都很容易处理。

忽略错误最好有日志。

不然会给维护带来很大的麻烦。对于同一个地方不停的报错,最好不要都打到日志里。不然这样会导致其它日志被淹没了,也会导致日志文件太大。最好的实践是,打出一个错误以及出现的次数。

不要用错误处理逻辑来处理业务逻辑。

也就是说,不要使用异常捕捉这样的方式来处理业务逻辑,而是应该用条件判断。如果一个逻辑控制可以用 if - else 清楚地表达,那就不建议使用异常方式处理。异常捕捉是用来处理不期望发生的事情,而错误码则用来处理可能会发生的事。

对于同类的错误处理,用一样的模式。

比如,对于null对象的错误,要么都用返回 null,加上条件检查的模式,要么都用抛 NullPointerException 的方式处理。不要混用,这样有助于代码规范。

尽可能在错误发生的地方处理错误。因为这样会让调用者变得更简单。向上尽可能地返回原始的错误。如果一定要把错误返回到更高层去处理,那么,应该返回原始的错误,而不是重新发明一个错误。

标签:HTTP,错误,处理,错误码,日志,最好
From: https://blog.51cto.com/love/9231398

相关文章

  • Java日期时间处理详解
    Java中SimpleDateFormat、LocalDateTime和DateTimeFormatter的区别及使用在Java的世界里,处理日期和时间是常见的任务。尤其在Java8之前,SimpleDateFormat是处理日期和时间的主要方式。然而,Java8引入了新的日期时间API,其中LocalDateTime和DateTimeFormatter成为了新的选择。本文......
  • ORA-01102: cannot mount database in EXCLUSIVE mode的错误解决
    数据库运行环境oracle19c,安装后,启动数据库时报错,如下,经排查解决方法记录如下SQL>startupmountORACLEinstancestarted.TotalSystemGlobalArea2415917880bytesFixedSize   8899384bytesVariableSize  520093696bytesDatabaseBuffers 1879048192bytes......
  • Dating Java8系列之并行数据处理
    翎野君/文  分支合并框架 分支合并框架介绍分支/合并框架的目的是以递归的方式将可以并行的任务拆分成更小的任务,然后将每个子任务的结果合并起来生成整体结果。它是ExecutorService接口的一个实现,它把子任务分配给线程池(称为ForkJoinPool)中的工作线程。把任务提交......
  • 开发医疗保险欺诈识别监测模型如何进行数据集分析与预处理
    数据集加载:使用工具如Pandas库加载数据。使用pd.read_csv()等函数加载数据集到DataFrame。初步数据探索:使用head()、info()、describe()等方法查看数据的前几行、基本信息和统计摘要。使用shape属性获取数据集的大小。处理缺失值:使用isnull()和sum()方法查看每列......
  • 【C语言进阶篇】动态内存分配的六个常见错误
    <br>(文章目录)前言  <fontcolor=green>......
  • MT6785(Helio G95)芯片性能参数_MTK联发科4G处理器
    联发科MT6785平台采用台积电12nmFinFET制程工艺,2*A76+6*A55架构,搭载Android12.0/13.0操作系统,主频最高达2.05GHz,搭载HyperEngine游戏技术,通过四个增强领域的整体增强功能。搭载ArmMali-G76MC4GPU运行速度可提升至900MHz。支持H.264、H.265/HEVC格式视频编码,最高支持4K/......
  • 开发日志(数据结构、时间戳、javaException)
     (一)数据库类型mysql中的datetime可以转为postgres的date(二)数据库时间戳postgresql使用时间戳获取时分秒时间1、selectcurrent_timestamp2024-01-1214:16:31.93339+082、selectcurrent_timestamp(0) //去掉秒后面的位数,但仍有时区2024-01-1214:17:42+083、CURRENT_TIMESTAMP(......
  • Linux系统日志管理
    一、系统日志的作用系统日志记录了系统运行过程中产生的各种信息,如错误信息、警告信息、提示信息等。这些信息对于了解系统的运行状态、诊断故障、保障系统安全等方面具有重要作用。当系统出现问题时,通过查看日志可以快速定位故障原因,便于进行修复。同时,日志可以帮助系统管理员了解......
  • 几种数据库忘记密码的处理方法
    MySQL8.0分为rpm方式和tar.gz安装方式不同而不同需要修改/etc/my.conf配置文件.注意如果是rpm包的话就在这个路径下面修改增加内容skip-grant-tables注意修改完需要重启数据库rpm包安装的方式重启方法为:systemctlrestartmysqld然后可以无密码登录数据mysql-uro......
  • dremio jdbc 插件时间增量处理的一些问题
    dremio支持一些增量数据处理能力,同时可以选择增量字段,目前dremio是提供了一些实现,比如反射数据基于iceberg对于增量可以是不同的数据源(jdbc的,文件系统的,iceberg的),日常大家可能选择基于时间戳的(尤其业务系统是基于时间标识的append类型的)对于时间类型(timestamp),不同数据库......