版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Spring如何按业务模块输出日志到不同的文件详解目录一、背景二、需求三、技术实现四、代码实现1、编写xml日志文件2、编写QQ模块的代码3、编写login模块的代码五、运行结果六、完整代码七、一个小知识点总结
一、背景
在我们开发的过程中,可能存在如下情况:
1、有些时候我们需要调用第三方的接口,一般情况下,调用接口,我们都会记录请求的入参和响应的。如果我们自己系统的日志和第三方的日志混合到一个日志文件中,那么可能查找日志就比较麻烦了。那么我们是否可以将第三方系统的日志单独放到另外的文件中呢?
2、或者有些时候我们系统需要进行数据迁移,如果某条数据迁移失败了,是否单独放到一个日志文件中比较清晰呢?
二、需求
从上图中可以看到我们的需求比较简单
1、系统启动日志和login模块日志记录到springboot-spring.log文件中。
2、第三方业务(QQ)模块的日志记录到springboot-qq.log文件中。
3、第三方业务(QQ)模块提供了一个login(loginName)方法,方法的入参loginName需要记录到springboot-qqLoginName.log文件中,模拟一、背景中提到的数据迁移失败,记录失败的数据到单独的日志文件中。
三、技术实现
1、采用的日志框架
此处使用logback来完成日志的记录,因为SpringBoot应用程序默认的就是采用的logback来记录日志。
2、如果实现分模块、分文件记录日志1、编写appender,这个可以简单的理解日志需要输出到哪里。
比如:
!--此处定义的日志输出到控制台--
appendername="stdout"
encoder
pattern%d{yyyy-MM-ddHH:mm:ss.SSS}[${PID:-}][%thread]%-5level%logger{50}#%method:%L-%msg%n/pattern
/encoder
/appender
!--此处定义日志输出到springboot-qq-日期.第几个.log文件中--
appendername="qqAppender"
rollingPolicy
fileNamePatternlogs/springboot-qq-%d{yyyy-MM-dd}-.%i.log/fileNamePattern
/rollingPolicy
/appender
2、如何实现模块输出日志
此处就需要我们来配置logger了。logger的name属性指定到具体的全包名,然后引用我们上面定义的appender即可。
!--在QQ这个包下的日志单独使用qqAppender来输出--
loggername="com.huan.springboot.qq"level="info"additivity="false"
appender-refref="qqAppender"/
appender-refref="stdout"/
/logger
配置logger,logger的name为需要单独生成文件的那个包的全包名,然后在里面引用上面定义的appender
3、如果实现将loginName输出到指定的文件
其实还是使用logger来实现,logger的name需要和LoggerFactory.getLogger(此处写具体logger的name的值)
注意:
此处可能有一个坑,就是可能会丢失类名,那么我们如何进行解决呢?可以通过MDC来解决。
....%X{CLASSNAME}#%method:%L-%msg%n
MDC.put("CLASSNAME",QQService.class.getName());
qqLoginN("登录用户:[{}]",loginName);
即xml中使用%X{CLASSNAME},在java代码中使用MDC存入CLASSNAME的值。
四、代码实现
1、编写xml日志文件
1、编写appender
1、输出日志到控制台
appendername="stdout"
encoder
pattern%d{yyyy-MM-ddHH:mm:ss.SSS}[${PID:-}][%thread]%-5level%logger{50}#%method:%L-%msg%n/pattern
charsetUTF-8/charset
/encoder
/appender
2、编写login模板的日志
appendername="file"
rollingPolicy
fileNamePatternlogs/springboot-spring-%d{yyyy-MM-dd}-.%i.log/fileNamePattern
maxHistory7/maxHistory
maxFileSize1MB/maxFileSize
totalSizeCap2GB/totalSizeCap
/rollingPolicy
encoder
pattern%d{yyyy-MM-ddHH:mm:ss.SSS}[${PID:-}][%thread]%-5level%logger{50}#%method:%L-%msg%n/pattern
charsetUTF-8/charset
/encoder
/appender
3、编写qq模板的日志
appendername="qqAppender"
rollingPolicy
fileNamePatternlogs/springboot-qq-%d{yyyy-MM-dd}-.%i.log/fileNamePattern
maxHistory7/maxHistory
maxFileSize1MB/maxFileSize
totalSizeCap2GB/totalSizeCap
/rollingPolicy
encoder
pattern%d{yyyy-MM-ddHH:mm:ss.SSS}[${PID:-}][%thread]%-5level%logger{50}#%method:%L-%msg%n/pattern
charsetUTF-8/charset
/encoder
/appender
4、编写qq模块loginName单独输出到文件的日志
appendername="qqLoginNameAppender"
rollingPolicy
fileNamePatternlogs/springboot-qqLoginName-%d{yyyy-MM-dd}-.%i.log/fileNamePattern
maxHistory7/maxHistory
maxFileSize1MB/maxFileSize
totalSizeCap2GB/totalSizeCap
/rollingPolicy
encoder
pattern%d{yyyy-MM-ddHH:mm:ss.SSS}[${PID:-}][%thread]%-5level%X{CLASSNAME}#%method:%L-%msg%n/pattern
charsetUTF-8/charset
/encoder
/appender
2、配置日志输出到具体位置
1、配置login模块
rootlevel="INFO"
appender-refref="stdout"/
appender-refref="file"/
/root
login模块属于我们自己的系统模块,此处使用root标签来配置。
2、配置qq模块
!--在QQ这个包下的日志单独使用qqAppender来输出--
loggername="com.huan.springboot.qq"level="info"additivity="false"
appender-refref="qqAppender"/
appender-refref="stdout"/
/logger
此处name的值直接指定到了qq的全包名路径。
3、配置loginName单独输出到文
!--将所有的QQ登录名防止在另外的文件中--
loggername="qqLoginName"level="info"additivity="false"
appender-refref="qqLoginNameAppender"/
appender-refref="stdout"/
/logger
2、编写QQ模块的代码
@Component
publicclassQQService{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(QQService.class);
//getLogger("qqLoginName")里的qqLoginName需要和logback-spring.xml中logger的name一致,才会应用
privatestaticfinalLoggerqqLoginName=LoggerFactory.getLogger("qqLoginName");
publicvoidlogin(StringloginName){
("QQ业务:用户:[{}]开始使用QQ来登录系统",loginName);
MDC.put("CLASSNAME",QQService.class.getName());
qqLoginN("登录用户:[{}]",loginName);
3、编写login模块的代码
@RestController
publicclassLoginController{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(LoginController.class);
@Resource
privateQQServiceqqService;
@GetMapping("login/{loginName}")
publicStringlogin(@PathVariable("loginName")StringloginName){
("自己业务:用户:[{}]进行登录",loginName);
qqService.l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- BIM实施方案资料
- 市场扩张计划策略书模板与实施方案
- 企业品牌宣传与推广标准化手册
- 供应链管理优化策略与工具包
- 技术支持响应快速流程与知识库工具
- 吉林省前郭县联考2026届初三下学期教育质量调研(二模)英语试题含解析
- 江苏省泰州市泰兴市西城达标名校2026年初三一模试题(语文试题文)试题含解析
- 行业诚信领域活动启动承诺书(6篇)
- 居民区绿化管理保证承诺书6篇
- 2026年建筑工地消防安全专项方案编制指南
- 口腔颌面部外伤的护理个案
- 人工智能在农产品质量检测行业的创业计划书提供智能农产品质检解决方案
- 幼儿园实物拓印版画教学的实践研究
- 2025年湖南农电服务招聘考试(非电工类)模拟试题及答案
- 通信行业市场前景及投资研究报告:光模块框架培训
- 国有企业资产租赁合同协议(GF-2025-002)
- 禁毒安全主题班会课件
- 2024河南农业大学辅导员招聘笔试真题及答案
- 餐饮具清洗消毒规程培训考试题及答案
- 2025年幼师高考语文试卷及答案
- 变压器拆除施工方案
评论
0/150
提交评论