其实SpringBootAdmin日志获取日志文件失败的问题并不复杂,但是又很多的朋友都不太了解,因此呢,今天小编就来为大家分享SpringBootAdmin日志获取日志文件失败的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
排查问题
入口是SpringBootAdmin服务,instances/74ad10016842/actuator/logfile。通过调试,转入客户端开放的clientPoint(这里自定义前缀,默认是actuator)/logfile接口。
到客户端的logfile接口断点处,一步步发现fastjson消息转换器配置好了。事实上,需要这个消息转换器来解析org.springframework.http.converter.ResourceRegionHttpMessageConverter(Spring MVC中的一个消息转换器,主要用于处理返回的资源文件(例如图片、视频等多媒体文件)的分块请求)主要用于响应客户端发送的Range请求头,以便客户端可以请求资源文件的特定部分。)
怎么破解呢?如上图所示,遍历消息转换器的时候有一个if判断,会用到各个转换器的canWrite,所以这里就是切入点,看看这个方法是否可以重写。
for (HttpMessageConverter?转换器: this.messageConverters) {GenericHttpMessageConverter genericConverter=(转换器实例GenericHttpMessageConverter ?(GenericHttpMessageConverter?)转换器: null);if (genericConverter !=null ?((GenericHttpMessageConverter)转换器).canWrite(targetType, valueType, selectedMediaType)第:章Object theBody=body;LogFormatUtils.traceDebug(logger,traceOn – ‘正在写入[‘ + LogFormatUtils.formatValue(theBody,traceOn)+’]’);addContentDispositionHeader(inputMessage,outputMessage);if(genericConverter!=null){genericConverter。 write(body,targetType,selectedMediaType,outputMessage);}else {((HttpMessageConverter)转换器).write(body,selectedMediaType,outputMessage);}}else {if(logger.isDebugEnabled()){logger.debug(’没什么write: null body’);}}return;}}进入fastjson转换器发现有,或者调用父类
那么对应的org.springframework.http.converter.ResourceRegionHttpMessageConverter也应该重写这个方法,确实如此
因为fastjson转换器排在第一位,如果去掉它的逻辑,后面的就不会被去掉,那么如何跳过呢?通过上面的分析,突破口就是重写fastjson的canWrite方法。但如果要考虑到不破坏原有逻辑,就得调试一下,看看调用logfile接口进入fastjson的canWrite时Type是什么值,做出判断跳出。如果你想按全部
资源区域Http
对于MessageConverter,只需复制其方法逻辑并反转即可。
进入继承fastjson的转换器,重写canWrite并打断点。进来一看,类型实现类为sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl,其中包含Listorg.springframework.core.io.support.ResourceRegion。
所以重写可以写为,重启客户端
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/176185.html
用户评论
青墨断笺み
哎哟,这可怎么整?搞了半天终于弄好了项目环境,结果想要查看日志发现都拿不出来啊!SpringbootAdmin 的文档看起来还挺详细滴,为啥我的操作跟没看到似的?!
有6位网友表示赞同!
弃我者亡
我也是遇到这个情况,把spring-boot-starter-logging包加上之后仍然报错。难道是我的配置有哪里不对?看网上有人说可能是数据库的问题,我去试下吧!
有5位网友表示赞同!
摩天轮的依恋
我之前是使用Grafana连接的日志系统,当时遇到类似问题,后来发现是权限问题导致的,检查下你的日志文件读写权限和安全策略吧!
有6位网友表示赞同!
面瘫脸
别慌!这个问题确实比较头疼。我也是刚开始学习SpringBootAdmin,感觉配置有点复杂,不如多看看官方文档或者社区的解答,比如在Spring Cloud Alibaba官网上应该可以找到一些解决方案。
有6位网友表示赞同!
浅笑√倾城
遇到过这种问题啊,当时我按照官方文档配置了日志收集系统,但是后来发现有些日志文件路径不对,导致无法获取。记得查看你的日志文件地址是否正确哦!
有11位网友表示赞同!
醉婉笙歌
SpringBootAdmin 的日志模块确实挺容易出问题的,而且官方文档有时候解释得也比较含糊。如果实在找不到原因,建议尝试从简,一步一步排除问题所在。
有6位网友表示赞同!
封锁感觉
我也是碰到这个问题了,检查了一下配置,发现日志的输出路径是错误的,修改路径后就正常了!希望我的回答能帮到你哦!
有7位网友表示赞同!
忘故
唉,这SpringBootAdmin 总是让我头疼啊,今天又遇到这个日志获取问题,感觉自己的代码好像都不错,为什么还是出bug了呢?太坑人了!
有6位网友表示赞同!
╭摇划花蜜的午后
建议关注 SpringBootAdmin 的官方社区或者 Github 上的 issue,里面经常会有解决类似问题的方案。我也是从那里学会了很多经验的。
有18位网友表示赞同!
一生荒唐
我之前也是遇到这个问题的时候看了一段时间代码文档才发现是版本问题导致的,把日志组件升级到最新版后就解决了,希望你也能找到原因!
有19位网友表示赞同!
限量版女汉子
SpringBootAdmin 虽然功能挺全面的,但是有时确实会遇到各种奇怪的问题,特别是配置方面比较复杂。希望你能赶紧解决这个问题啊!
有11位网友表示赞同!
暖瞳
我建议你也试试查看 SpringBootAdmin 的 log 文件,里面可能会有关于日志获取失败的具体错误信息,根据错误信息可以更准确地定位问题所在。
有13位网友表示赞同!
哭花了素颜
遇到这个情况的时候,感觉自己好像是个菜鸡一样,啥都不懂。只能慢慢学习去解决这个问题了!
有19位网友表示赞同!
见朕骑妓的时刻
我也关注过SpringBootAdmin ,确实是一个很不错的工具,但有时会遇到各种让人头疼的问题,比如这次的日志获取问题。希望他们能尽快给出解决方案!
有17位网友表示赞同!
暖栀
这个SpringBootAdmin 的官方文档真的不怎么样,很多问题找不到答案,只能自己在网上搜索解决方案了。
有14位网友表示赞同!
你tm的滚
这个问题感觉太常见了。我之前也是踩坑了一番,最后发现是防火墙问题导致的。检查一下你的 firewall 配置吧!
有16位网友表示赞同!
景忧丶枫涩帘淞幕雨
遇到同样的问题了!感觉自己好像回到了新手阶段,好多东西都忘记了。只能重新温习一遍文档了。
有8位网友表示赞同!