PageSourceSearch

https://detectivehlh.github.io/assets/230839.html-46a1a2df.js

js detectivehlh.github.io collected 2026-10-03 08:59:11 UTC 6,977 bytes, 1 lines download raw bytes

1const e=JSON.parse('{"key":"v-2a144ff5","path":"/posts/230839.html","title":"手把手教你如何优雅的使用Aop记录带参数的复杂Web接口日志","lang":"zh-CN","frontmatter":{"date":"2019-02-11T00:00:00.000Z","permalink":"/posts/230839.html","category":["Java"],"tag":["AOP"],"description":"手把手教你如何优雅的使用Aop记录带参数的复杂Web接口日志 前言 不久前,因为需求的原因,需要实现一个操作日志。几乎每一个接口被调用后,都要记录一条跟这个参数挂钩的特定的日志到数据库。举个例子,就比如禁言操作,日志中需要记录因为什么禁言,被禁言的人的id和各种信息。方便后期查询。 这样的接口有很多个,而且大部分接口的参数都不一样。可能大家很容易想到的一个思路就是,实现一个日志记录的工具类,然后在需要记录日志的接口中,添加一行代码。由这个日志工具类去判断此时应该处理哪些参数。 但是这样有很大的问题。如果需要记日志的接口数量非常多,先不讨论这个工具类中需要做多少的类型判断,仅仅是给所有接口添加这样一行代码在我个人看来都是不能接受的行为。首先,这样对代码的侵入性太大。其次,后期万一有改动,维护的人将会十分难受。想象一下,全局搜索相同的代码,再一一进行修改。","head":[["meta",{"property":"og:url","content":"https://leonsh.cn/posts/230839.html"}],["meta",{"property":"og:site_name","content":"SH的全栈笔记"}],["meta",{"property":"og:title","content":"手把手教你如何优雅的使用Aop记录带参数的复杂Web接口日志"}],["meta",{"property":"og:description","content":"手把手教你如何优雅的使用Aop记录带参数的复杂Web接口日志 前言 不久前,因为需求的原因,需要实现一个操作日志。几乎每一个接口被调用后,都要记录一条跟这个参数挂钩的特定的日志到数据库。举个例子,就比如禁言操作,日志中需要记录因为什么禁言,被禁言的人的id和各种信息。方便后期查询。 这样的接口有很多个,而且大部分接口的参数都不一样。可能大家很容易想到的一个思路就是,实现一个日志记录的工具类,然后在需要记录日志的接口中,添加一行代码。由这个日志工具类去判断此时应该处理哪些参数。 但是这样有很大的问题。如果需要记日志的接口数量非常多,先不讨论这个工具类中需要做多少的类型判断,仅仅是给所有接口添加这样一行代码在我个人看来都是不能接受的行为。首先,这样对代码的侵入性太大。其次,后期万一有改动,维护的人将会十分难受。想象一下,全局搜索相同的代码,再一一进行修改。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-01-09T11:45:29.000Z"}],["meta",{"property":"article:author","content":"LeonSH"}],["meta",{"property":"article:tag","content":"AOP"}],["meta",{"property":"article:published_time","content":"2019-02-11T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-01-09T11:45:29.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"手把手教你如何优雅的使用Aop记录带参数的复杂Web接口日志\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2019-02-11T00:00:00.000Z\\",\\"dateModified\\":\\"2024-01-09T11:45:29.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"LeonSH\\",\\"url\\":\\"https://leonsh.cn\\"}]}"]]},"headers":[{"level":2,"title":"前言","slug":"前言","link":"#前言","children":[]},{"level":2,"title":"开始操作前","slug":"开始操作前","link":"#开始操作前","children":[]},{"level":2,"title":"开始操作","slug":"开始操作","link":"#开始操作","children":[{"level":3,"title":"新建项目","slug":"新建项目","link":"#新建项目","children":[]},{"level":3,"title":"新建Aopç±»","slug":"新建aopç±»","link":"#新建aopç±»","children":[]},{"level":3,"title":"自定义注解","slug":"自定义注解","link":"#自定义注解","children":[]},{"level":3,"title":"加上普通注解","slug":"加上普通注解","link":"#加上普通注解","children":[]},{"level":3,"title":"加上带类型注解","slug":"加上带类型注解","link":"#加上带类型注解","children":[]},{"level":3,"title":"通过反射获取请求的参数","slug":"通过反射获取请求的参数","link":"#通过反射获取请求的参数","children":[]},{"level":3,"title":"获取简单参数类型","slug":"获取简单参数类型","link":"#获取简单参数类型","children":[]},{"level":3,"title":"获取复杂参数类型","slug":"获取复杂参数类型","link":"#获取复杂参数类型","children":[]},{"level":3,"title":"判断请求是否成功","slug":"判断请求是否成功","link":"#åˆ
1¤æ–­è¯·æ±‚是否成功","children":[]},{"level":3,"title":"通过反射获取返回的参数","slug":"通过反射获取返回的参数","link":"#通过反射获取返回的参数","children":[]}]},{"level":2,"title":"项目源码地址","slug":"项目源码地址","link":"#项目源码地址","children":[]}],"git":{"createdTime":1704800729000,"updatedTime":1704800729000,"contributors":[{"name":"leonsh","email":"[email protected]","commits":1}]},"readingTime":{"minutes":17.41,"words":5222},"filePathRelative":"posts/Java/手把手教你如何优雅的使用Aop记录带参数的复杂Web接口日志.md","localizedDate":"2019å¹´2月11日","excerpt":"<h1> 手把手教你如何优雅的使用Aop记录带参数的复杂Web接口日志</h1>\\n<h2> 前言</h2>\\n<p>不久前,因为需求的原因,需要实现一个操作日志。几乎每一个接口被调用后,都要记录一条跟这个参数挂钩的特定的日志到数据库。举个例子,就比如禁言操作,日志中需要记录因为什么禁言,被禁言的人的id和各种信息。方便后期查询。</p>\\n<p>这样的接口有很多个,而且大部分接口的参数都不一样。可能大家很容易想到的一个思路就是,实现一个日志记录的工具类,然后在需要记录日志的接口中,添加一行代码。由这个日志工具类去判断此时应该处理哪些参数。</p>\\n<p>但是这样有很大的问题。如果需要记日志的接口数量非常多,先不讨论这个工具类中需要做多少的类型判断,仅仅是给所有接口添加这样一行代码在我个人看来都是不能接受的行为。首先,这样对代码的侵入性太大。其次,后期万一有改动,维护的人将会十分难受。想象一下,全局搜索相同的代码,再一一进行修改。</p>","copyright":{"author":"LeonSH"},"autoDesc":true}');export{e as data};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.