日制呢,我们添加上的做到这里呢,咱们日制已经可以控制住了,那接下来我们就要来说说这组信息了, 这组信息显示以后呢,其实你会发现哦,原来我自己写的信息都在最后面,对吧? 那前面的这些信息都是什么呢?如果你不了解日制,你看这个代码就比较辛苦。来说一下, 对于我们的日志来说,他的信息由这么如下几部分组成,首先他会有一个日期,时间精确到毫秒 当前日制对应的时间,即日制的一个最核心的信息就是这条日制对应的时效性在什么时间发生的。第二个日制的级别,这个级别是由你自己记录控制, 而框架内会有很多的框架设定,打日制也是为了方便我们的开发者使用的时候看到他的一些核心信息的。第三个信息叫做 pid, 这个 pid 之前带着大家看过,还记得吧,咱们在 windows 还有另一个词下杀人物的时候用这个 pid, 那么这个 pid 有什么用呢?他表示进程,用来表明当前操作在哪个进程中,你现在做这种学习的时候你看不出来,等到你上线的时候有多个服务同时记日制的时候,那我告你就热闹了, 这个时候没有这个 pid, 你都不知道是哪个服务给你寄的。说的简单一点,我有八个服务器用来干同一件事,比如说双十一的订单,处理速度比 比较慢,我们给他扩容好,扩了八个服务器,问题来了,出问题了,接着治了,谁给你记得呢? pid 能帮你分辨出来, ok 吧, 他主要用来协助程序员做程序调试的啊,接下来呢就是这个慢,这是什么所属的县城主,县城后面还有其他的名称啊,至于这个简简简中口号,这是你自己手工加上的,不重要啊。 然后再往后,下面这个信息是什么?是当前日制在哪个类或者接口里边触发激活的,说白了就是你当前的日制的记录位置是在哪个类里。不过这里边有一个信息需要给大家说一下啊, 可能有很多人没有关注过,你见过这样的类名包名吗?系统定义的前面的包名是 w s 点 c 点搜雷特,外边搜雷特、艾伯雷克星、康泰克斯。没有啊,注意,在布特里边对这个日制记录的类名进行了一个格式重写,他把所有的长名称苞米全部都简化了, 简化成一个字母。有人说那万一类名的长度非常长超过呢?没有,这个地方给的位置非常之宽,有四十位置多, 一般的类名都写不到四十位啊,所以说一定会解决这个问题的,你像我们写的科目点 it 黑马点 spa 什么什么,是不是就显示完了? 如果你写的再长一点的话,你也会发现这个现象的啊,这就是咱们所说的这个所属类或者接口名啊,名称过长寿,他有一个简化规则,最后一个这是我们的日志消息,也就是你在节日制的时候在那个里边打 的那个信息。到这呢,咱们就已经看完了所有的日志相关的格式了, 那我们记录的格式如果想进行调整不计,这样怎么办呢?也必须得能设置,那接下来就带着大家来设一下日制的输出格式, 咱们把格式给调整一下啊,关于日制记录过程中使用的各种各样的占位服,比如说百分号 d 代表日期,百分号 m, 你也可以写 msg 代表消息, n 代表换行。这些东西呢,不在这个课里讲了,大家到评论区第一条去找对应的课程,应该在外边课程中讲的啊, 来,咱们直接改一下啊,这就又牵手到我们布特的知识了,就是在这里边如何设置我们的日制消息格式啊?先打个 logo, 日制的记录格式,这算个啥?其实就是模板啊, p a t t e r n 方案或者模板 pardon 出来了,看到没有?第一个 logging pardon, 第二抗揍什么意思?控制台输出的日志长什么样 吧,后面给了你个例子,非常之长啊,不太好懂。没关系,咱们按照自己的想法写就行, 我写到这以后,你会发现他的第一集直接合并到上面了,不用管他了啊,咱们就接着这个地方写,在这写一下,设置日制的模板格式, 然后在这我们写上一个百分号 d 代表时间,然后我空一格写个减号,再空一格,一会你去看这个减号啊,来个百分号 m, 这是消息,你也可以写 msg, 也可以写 m essag message, 各种各样的格式。最后呢,我再来一个百分号 n, 当然这个东西你挨着写也行,空一格写也行,因为这个东西本身是一个不可见的字符,不管你前面写啥,他都不影响啊, 把他的整体信息写完以后呢,最后记得把他写在一个字符串内,因为这里边用到的符号都过于特殊了啊,这些东西他没法解析。来,咱们再来运行,注意观察。嗯,现在已经运行完了, 是不是有一种好清爽的感觉。日制的消息格式被我们定义了,这是时间,这是消息, 后面直接一换行,你要把百分号 n 一去掉,我告诉你,就一行都连在一起的,那我们把这两行给他注掉,然后我们再来运行一下, 我们看看原来的格式是不是花花绿绿的,还挺有意思的,是吧,那咱们就写个这样的格式吧。 哎,让大家也体验一下啊。来,我把它打开,上面这一行呢,咱就不要了,再写一行,把这一行替换掉就行了。咱们可以一起来分析这些啊。第一个时间半封号 d 没问题,然后接着空一格, 这个东西叫什么?叫做日志级别,在这里边用的词叫什么?叫做百分号 p, ok 吧。 然后后面东西我先去掉啊。先说一下这个百分号 p, 它代表的是我们的 level, 就是你的每一个级别, 我们来运行一下得,没有换行,直接可以搞到一行上了啊,会死人的啊。先把换行给他挂上 啊,刷新一下,刷完以后呢,咱们来看一看他的效果,现在这都是英佛类的信息,我来刷一下他, 你会看到是不是有的长有的短,这样不利于对齐。怎么办?我们在前面给他加个数字,五代表这一位,他的占的总宽度是五位,为什么是五?第八个五个字母,音符四个字母, 然后 l 五个字母,呜吻四个字母,不管是四个五个都按五个,这样便于他对齐。所以你经常看到百分号干五 p 啊,在这呢啊,这个写错地了啊,百分之二干五 p 就是这意思, 但是仔细看看,哎,怎么不带颜色呢?你的颜色哪去了呢?来说一下,你把这行注掉,在这打 一个康寿,后面会给你提示,看到这个 clr 了吧,什么意思?彩色,就是用彩色标注,这个是需要你的日志本身支持的啊,咱们这个明显的是支持的,把它加上百分号 clr 怎么用呢?注意给谁家放在谁上面,百分号 clr, 然后一个小括号把它包裹住,别忘了这件事啊。然后我们再来刷一下,看看现在这个颜色是否上去了, 是不是已经上来了。好,在这边呢,我们去刷新一下,然后到这边来,是不是所有颜色都有了, 如果你想改这个颜色能不能改呢?能改一会再给大家说啊。好了,到这呢,这一步演完了,接着往下执行原来的看啊,下边这个东 东西哦,这个东西就厉害了,这个东西是 pid, 这个 pid 呢,在咱们这里边没法直接获取,这是布特给重写的东西,咱们放过这一个啊,直接往后面写, 然后减减减,记得这中间我空了一格,然后再空一格,来一对中口号,看到这对中口号了吧, 哎,然后把里边现成名给他打上,现成名叫什么?百分号 sred thid, 剪成百分号 t, 这就 ok 了。然后呢,我们再去刷一下,看看效果如何啊,看看和他出来的效果差别有多大。 这个进程号呢,咱们就不管了啊, ok 吧,但是总感觉人家那个上面好像和我们的不太一样啊,前面是不是有很多 空格哎,在这个地方呢,他设置了这个地方的站位一共有多长? 这个长度是十六,所以在这个地方你要给他标注你的这个百分号 t, 十二点的显示是十六位, ok 吧,来把这个十六加上,以后呢,你看上去就会稍微舒服一点点,再来看一看啊, 来看现在是不是一样了,哎,搞定啊,接着继续往下,就是这种日志呢,别人怎么写的了解一下,回头你自己写的时候你也有思路啊。 下面这一个是吗?类名对吧?那类名叫什么呢?叫做百分号 class, 简称百分号 c, 这就是类名,我们给他刷一下来刷新,刷新完以后我们看。哎,现在这是不是类名出来了?哦,原来有这么 长啊,还记不记得我前面跟你们说的 osb w 什么 et 什么玩意的?就是这里边的首字母。明白,如果实在不够长,他会删除掉一些的,反正都已经成缩略形式了, 你看到不看到无所谓了,因为他是为了保证整齐的输出,所以做的这样。那我们也给他规定一下吧。怎么规定呢?哎,咱们给这改一下,我们说类名四十位宽,百分号四十 c, 这就是四十位宽, 有人一看这什么玩意,别着急,我把他后面的消息给你挂上,咱们再说啊,最后再来调他,因为这里边调试最麻烦的就是这个类名啊,看看他最后是不是空了一格,然后加了个 冒号,又空一格加消息,咱先把这些东西给他挂上啊,空一格冒号,再空一格,来个百分号 m, 这是消息,然后换行。好了,这就设完了。然后我们先来看一看整体啊,再来说这里边的问题, 来看一看。哎,现在已经出来了,怎么和别人不一样啊?这这这,这都什么乱七八糟,说一下,他现在的对齐规则是不一样的,你注意一下这个冒号,他是不是一直在尝试性的对齐, 对吧?但是总会有一些特别耽误事的,特别长的,所以他要对他进行一个阶段的操作。那截多少位呢?刚才说了四十位,这是首先他截四十位,那有人说人家那类名左边没有空格,哎。接下来的我 题是结四十位以后默认的是怎么对齐,右对齐还是左对齐?现在我用的是右对齐,我们要用左对齐的话减四十,再来刷一下,再来看 现在是不是已经左对齐了。这个问题已经解决了,那么四十位长如果超过部分怎么办呢?做删除处理。所以在这个后面还要再说你里边显示的内容长度的控制,我们再来个点四十, 这个点四十控制的是内容的截取,再来刷完以后呢,你就能看到和刚才有点不太一样了,现在已经彻底 ok 了,注意观察。我这里边泪明都留下来了,但是你看前面和人家一样吗? 还是不太一样的,对不对?我这是直接就结,啥都不管,我要求类名必须显示,但是左边的报名就管不了那么多了,所以显示成啥样就啥样了, ok 吧。好到这呢,彻底解决了。有人觉得还是不太像颜色,对,把颜色给他挂上, 再来复制一下,把这个百分号这一串给他挂上去,再来刷。现在颜色就上来了,上来归上来,但是他是个绿的,人家原来是什么颜色, 不知道看一眼嘛?看一看,嗯,是这个颜色,对吧?那好了,要想给他设置颜色怎么设置?简单,在你设置颜色的时候,你要想指定颜色,直接在后面打一对大口号,把颜色打上 c、 y、 a、 n, 这是一个清 红色啊,再来刷一下来看一看,这是我们自己调的颜色, ok 吧,你说我想看红 id 马上就能调啊,但是这个颜色呢,他并不是你随便写个啥都能用的,这是系统内置的一些颜色,我要没记错是六个颜色啊, 在日制中就已经可以了,整的花里胡哨的干啥呀,对吧?好了,到这呢,咱们这一套东西就做好了,其实这里边的东西还有很多啊,日制系统一般一个公司只要是做好以后,这些东西都是定死的,一辈子都不会动的,所以说也轮不着你们自己去写, 什么时候会轮着你自己写呢?就是如果说你要是自己创业了,或者说是在公司里边,你是第一个报道的,那这个时候日制系统的这些建设维护工作,恐怕你作为 一个领头人,你就要需要自己去做了啊,像这种东西天下公司一大抄,你抄我我抄你,找一套复制粘贴过来就用了啊。 行了,关于这个东西咱们就说到这来,回到咱们资料里啊,刚才大家看的呢,其实就是下边我写的这个格式了,这个格式你可以自己随便写啊,没有固定的要求说非得写成什么样,自己看着舒服就行。 到账了,咱们这一节就给大家讲了日制的输出格式的一个设置规则,其实不难,关键是有些人可能没有接触过,但你看一下,你也知道这个日制该怎么调整有关日制的输出格式的控制,咱们就说到这。
粉丝7.8万获赞28.7万

看一个需求,在微服务中通过日志查看接口的入餐、出餐调用地址,调用方法 以及接口响应时间,那么这个需求的目的是什么?是通过以上参数更好的了解接口的运行情况以及错误排查, 那它的实现方式是什么?是 aop 切面编程,那么咱们来看一眼代码视力。首先在这里定义了个 srid logo 接口响应的开始时间,定义了一个切入点,这个切入点就是咱们的 ctrl 层 在读必放方法中打印请求地址, url, http, messer 的 ip 以及方法,还有咱们的参数。最后在 retin 里面打印它的返回参数以及它的执行时间, 通过 postman 调一下看看效果。来控制台看一下日志, 这里边已经打印了咱们的请求地址就是本地,它的 i h t t p max 就是盖的方法, ip 地址就是本地的 ip 地址, 所调用的方法就是咱们刚才用的这个 save 方法,因为这个方法里没有参数,所以说参数为空,还有返回值以及接口的选用时间。

在 swind boss 中记录操作日志需求,背景是就要将用户对系统的操作行为记录下来。直线, 为了将业务减五和以及能获取到请求参数信息,采用 aop 加自营业注解加 spl 表达式加多线程实现说明 aop 采用前置通知,业务减五,自营意注解 配合 aop 作为切点,用 spl 表达式 spring 内置的 el 表达式能够获取到参数的值。多线程 can play table future, 提高记录效率。先第一步,我们先新建一个增益注减,这个增益注减中有一个属性,也就是日志内容,这个 知识内容包含 spl 表达式。第二步,我们需要写一个 aop, 在这个 aop 中我们采用的是笔放前置通知,它的缺点就是我们的注解。然后在这个方法中有两个参数,第一个是装 point, 第二个就是字音页注解, 这两个需要对齐。然后第一步,我们需要先拿到参数,拿到参数之后我们还需要拿到参数的名称。接下来是 spl 解析,上下文把韩德勒麦色的的型餐都添加到摄像文中, 并且使用参数名声作为 k。 然后下一步是进行 spl 表达式的解析转换。最后一步是采用多线程 complate 包非优舍的软 acc 方法来进行一步纯属日志,这里指 打印了一行 log 来简单模拟一下。在实际操作中,这里需要一步记录到数据库中,在这个切面类的最上方有两个属性,那这两个属性一个是需要被 spl 解析的模板前缀和后缀,这里可以自应易得, 那我们这里自愿意就是一个花括号的左边和右边,通过这个模板就可以识别出来 spl 表达式来进行内容的替换,那第二个是 spl 解析器, 那这里也是需要先构建出来,接下来打开 ctrl, 在这个 ctrl 中我们有一个方法,然后现在我们只需要添加字音一注解,在这个字音一注解中,这的内容我们就可以通过 spl 表达式来进行拼接,那前缀和 后者都是我们自营一的。在这里我们需要拿到用户的 id, 也就是优则点,优则 id 就是这个对象中的优则 id 属性以及用户的名称就是优则点。内幕以及我们想从 record 对象中获取一些信息,也是可以通过 spl 表达式的语法来写的, 那这里我们来请求一下。这里又传入两个参数,第一个参数是 uzid, 第二个参数是内幕,我们来请求一下。 在控制台中我们可以看到查询参数,用户 id, 优则内幕 以及 ant 都是可以获取到的,从这里我们就可以实现了记录操作日志,通过 z e 的形式与业务结构合,而且只要符合 spl 语法的都可以进行操作,今天就讲到这,谢谢大家。

今天来讲一下视频部的怎么开启第八个日字,其实就是配置一下就可以了,在这个配置文件,然后添加一下这个这个配置就可以了,我们来演示一下第八个 打这个 id 有这个智能提示的,直接选中就可以了。刚才可以看到默认他是富二十,就是没有开启这个第八个日子,就是启动之后他只有音符日制,现在我们把它设置为这个配置为这个出,然后就配置好了,然后我们再启动一下, 可以看到是他开启了这个第八个日制级别之后,他是打印的比英佛级别更多的这个日制的,其实主要就是把这个第八个这个信息级别的这个日制给打印出来了,然后具体是包含了什么内容的,我们来看一下,就是 首先瞄一眼这个截图,就是第一个是这个第八个这个级别的这个日打印出来了,然后具体包含了什么东西呢?就这几个点。第一个就是他的自动配置有哪一些 视频布的,他的主要的核心的作用和目的就是约定大于配置,就这六个字就是很多配置以前需要你自己去配置的,而且是一些常用的配置,现在的话就是他全部都给你,就是自动的默认的就配置好了,就不需要你去手动的配置了, 这是第一个。第二个就是有哪些这个设备内的这个录音设。第三个是有哪些这个拦截器,我们先看一下这个截图, 首先第一个就是这个有哪些这个比如说这个转发这个收入,收入内的,这个是外部请求的这个一个核心的这个转发收入内的这个内以前的话需要在这个外部场面里面配 制的,现在是不需要配置,自动就已经开启了,就很方便很简单。然后这里也打印的这个 sorene 的这个这个卷发,这个 sorene 这个类,还有是能接气,能接气的话就是这些能接气然后都打印出来了。主要是这几点,我们也可以看一下我们刚才启动的 第一个是有哪一些这个就自动配置,这些是包含了所有的这个自动配置的,都答应出来了。比如说我们之前就是要配置这个转发收入内的,现在都不需要配置的, 直接就是视频部的自动的帮你配了。然后还有这个蓝天器过滤器,然后这个收入内的都可以打印出来了,就可以看到更多的这个信息。好,谢谢。

hello, 今天给大家分享我们用 spring boot 使用 aop 进行统一的日志管理,比如这边有一个方法 test, 如果我调用这个方法,我希望在之前能够打印出它的一个方法名和入裁,我在这呢调用一下这个接口, 那这边呢有两条第八个日志啊,我们看一下,然后呢这边分别就打印了它进入这个方法以及出去这个方法,并且传入的一个参数呢是十二。然后呢还有调用的一个方法呢是 test, 那这边主要其实就是这样的一个切面类啊,然后呢这边定了一些切入点啊,包括就是 spring 框架的切入点,然后呢还有我们项目中的一个切入点,那这边有一个环绕通知 around, 这个方法作用呢就是在方法进入和推出 时候记录我们日志的一个通知,这个方法呢就是记录方法抛出异常的一个通知,而且我们还会根据我们的一个环境来进行判断,如果是开发环境和测试环境,我们进行这样打印,如果是生产环境呢,我们这样打印, 然后这边呢有一个 look bug 的一个日志文件啊,我们在这边呢主要是定义了不同环境的它的一个日志打印的规则也比较简单。那如果说大家想要这样的一个 demo 以及之前的 demo 的话呢,可以到这来 这,然后给他去发一个消息,像这样就可以拿到我们的 demo。 好,今天的一个分享呢,就到这。

哈喽,今天给大家分享用 spring boot 实现日志链路追踪,无需引入组建,让日志定位呢更加方便。那有时候啊,我们一个业务调用链的场景呢,会很长,掉了各种各样的一个方法。那要做到方便呢?很显然,我们只需要把同一次的业务调用链上的日志串起来,像这样 给他同一个调用的一个 trace id 就可以。那我们首先需要引入这样的一个依赖。然后呢,我们需要整合 logback 打印日志,这些呢都是一些通用的配置,比较简单。 然后我们在 application 压磨里面,我们需要指定 lockbox 的一个地址。然后呢,我们需要配置这样的一个拦截器。 在这个里面呢,它每一次链路线程维度呢,我们都可以添加最终的一个链路的 id。 像这样大 m, d, c 呢,它是我们 cf 接提供的一个支持动态打印日志信息的一个工具。 然后呢,我们需要实现外版 vc 这样的一个接口,并且把我们的一个呃拦截器给他进行注册,并且我们指定哪些需要拦截。那我在这呢写了一个方法,我们可以进行简单的一个测试。 好,我们可以看到啊,这边呢就已经显示了我们的一个垂死 id 了。那接下来呢,我们来看一个使用紫线城的场景,比如说我在这个银色的上面,我加上了一个注解,然后我们看一下这个日志打印的一个情况。我们来访问一下, 其实可以看到啊,我们在紫线城的这边,翠丝 id 就已经没有了,就丢失了是吧。那我们这个问题该如何解决呢?那我们的思路呢,其实就是将我们副线城的一个翠子 id 传递给我们的紫线城就可以了。 所以呢,我在这边加了一个现成池的配置。这个类呢是我们自己写的,我们点进去看一下。然后这个里面呢,其实就重写了 了我们的 xq 的 submet 相关的一些方法。那我们在执行这个方法的时候,我们就其实相当于把这个 task 进行了一个装饰。这个里面做的呢,其实就是相当于把我们主线程的一个 trace id 放到我们子线程的一个 trace id 中。我们来看一下。 其实我们这边也能看到啊,当我们这个 context 不为空的时候,我们就可以把我们主线程的那个 trace id 给它设置到我们此线程中再返回是吧,也比较简单,我们来测试一下。 我们可以看到啊,子线城里面他也有了这样的一个垂死 id。 那如果说大家想要这样的一个 demo 以及之前的 demo 的话呢,可以到这来 这,然后给他去发一个消息,像这样就可以拿到我们的 demo。 好,今天的一个分享呢,就到这。

上节咱们最后提到了一点,就是关于这行代码能不能不写的问题,这种需求我觉得作为每一个开发人员,你都应该自己能做到才对。 那接下来呢,我就快速的开发一遍,先让你看一看,然后呢再抽取一下,给大家提供一个工具来快速的分析一下。你不就是想让每一个代码中都有这么一行吗?用继承啊, 这是不是最简单?当然了,还有别的形式能完成啊,比如说我们用 aop 也能够做到动态的给他引介一些东西进来,这个咱不在这讨论了,就用一个最简单的形式给大家看一眼啊,来把这一行先复制一下,然后注掉。你想要这套东西,那我就给你 提供一个公共的工具类, x 碳子贝斯 class, 基础类。在这个类里边呢,咱们去写对应的东西就行了,放什么位置不重要啊,我就随便扔一个地方了,来一个贝斯 class 在这里边,我把这行画粘上来结了,你回头一继承,我这是不是这个东西就有了不成?为什么不成?你想一想,你现在这么继承完以后,你这边的东西要给那边用,你这个地方写啥呢? 你是不是没法写啊?所以说在这个地方啊,咱给他改一改,首先这个要想外边能访问得啪啪雷,可这边首先不报错了,然后这个名称必须得写成获取当前类的类型。明白, 那好,我们假定啊, private stadic feno, 来个 c l a s s class, c l a z z, 如果这个东西有值,那么回头把这个 c l a z z 往这里边一填, 这不就搞定了吗?是这意思吧,那下面我们的任务就发生了转化,转化成什么了?叫做如何给他出实话?那我们就想写一些代码呗,我们说 this 点 get class, 这不就是当前类的类型吗?我们让 clazz 等于他,这不就结了吗?对吧?当时写到这呢,又发现一个问题,哎,他为什么报错呢?哦,实力在马块中用到了静态的东西,所以你在这 你得写这么一句话,叫做静态代码块好,把它写上以后又出问题了,什么呢?他告诉你,在静态代码块中不允许使用实力变量 zis 得, 这是一个头摇尾的游戏,固头不固定,你按 a 改不行,按 b 改也不行,那怎么办啊?回归到一个比较原始的方式上啊,我们来一个趴,不累可写一个构造方法 class。 然后呢,在这个地方我们就不写他的静态对象了。来,把这两句话呢,先给他搬到上边来,然后把后面的初始画呢全部都给他拿掉。 把这个初始画呢也先给他拿掉。接下来呢,咱们到这里边去给他做初始画。怎么初始画? c l a z 等于一个 z 点 get class, 这个没问题,既然你这儿不让用静态,我就把静态拿掉。有人说这个 fanel 干嘛的?这是一种标准书写啊,你不要也能用, ok 吧,那把它拿掉吧。 然后呢,下边这个我们写上一个 log, 等于一个这串东西。好,现在这两段代码处置化成了,这是什么原因呢?还是这个 fine 弄闹的啊?然后下边这段代码给它去掉。 现在这里边就声明了一个当前类的对象,然后声明了一个 log 对象,在这里边初始化当前类的对象,然后初始化烙个对象能不能用呢?来看一下现在这段代码和我这边的这个东西是不是一点关系都没有了。 来重启一下,重启完以后呢,马上就 ok 啊,重启完了,然后我们到这边来刷新 一下,然后过来看能不能用,这是不是已经系上来了?这种呢都属于小功能啊,咱不在这研究他了,我呢给他找个地方塞进去啊, 来创建一个全新的包,叫 b ak, 然后把这俩东西给他扔进去,咱们在这呢就用一个最简单的方式来完成,他这只是给大家说这种东西很好做啊,怎么做呢? 既然这种代码这么简单,那就有人会把工具给你提供出来,什么工具?让布壳里边给你加了个工具,他说你不就想要点代码吗? 我帮你写上,但是这个代码写在哪你得告诉我,所以他给你提供了一个注解,把注解挂上,马上就 ok, 明白吧?来,咱们把这个 项目停下来,项目停下来以后呢,咱们去把浪不可的坐标给他加上啊,浪不可底喷呢? c, 浪不可 浪不可,然后到我的没文里边去刷一下,不然他上不来啊,等他上来了以后,这个地方就会有浪不可的东西了。稍等,好,已经上来了,什么版本不重要啊,这是布特里边给我们提供好的, 然后他上来以后,我们就可以在咱们的类里边去写这个东西了。叫什么名称呢?看清楚,在上面我们加一个 at clf for g, slf for g, 好,把它加上以后,下边。问题是 这个对象叫什么名字呢?就叫 log, ok 吧,他就叫 log, 现在呢,这 套东西呢就已经完全的做好了,咱们就可以直接运行了,来重新运行以后你们的写法就是让不可引上以后啊,所有的功能类上面都挂个 att 三 f 二界, 因为你以后你要写的功能类上面加日制的概率还是很高的啊。哎,报错了,说什么?我们看看,说不可抗抽乐有俩哦,嗨,这事给闹的, 就是他俩给我捣乱了啊,那怎么办?挪走,不要你了,直接放在这里边了, 因为这里边他参与变异的时候有两个都叫不可抗仇了啊,挪走了啊,已经没了啊,这挪走以后呢,这俩东西是不是都没了,都不用了啊,把它干掉啊, 现在这里边就干净了,再来运行,运行以后呢,咱们看效果就行了,没有任何问题啊,这就是个小功能啊,来刷一下, 然后到这边来,是不是已经出来了,具体的他内部怎么做的咱就不研究了。在这呢就给大家带来了一个小工具啊, 优化这个日制对象的创建代码,使用 loom 不可提供的注解 soft 界来简化开发减少日制对象的这个声明。操作以后你记得,但凡你一个类要写日制的话,上来第一件事艾特 sff 界就行了。 好了,这一节就给大家讲了一个工具,让不可提供的艾特斯尔夫夫妻,快速为我们的功能类添加日制对象。有关这个内容咱们就先说到这。