热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springboot整合logback打印日志文件、定制日志格式

1实现第一步:在resources路径下创建日志的配置文件logback-spring.xml文件内容如下:

1 实现

第一步:在resources路径下创建日志的配置文件 logback-spring.xml

在这里插入图片描述
文件内容如下:






<configuration scan&#61;"true" scanPeriod&#61;"60 seconds"><contextName>logbackcontextName><property name&#61;"log.path" value&#61;"D:/logs"/><conversionRule conversionWord&#61;"clr"converterClass&#61;"org.springframework.boot.logging.logback.ColorConverter"/><conversionRule conversionWord&#61;"wex"converterClass&#61;"org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><conversionRule conversionWord&#61;"wEx"converterClass&#61;"org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/><property name&#61;"CONSOLE_LOG_PATTERN"value&#61;"${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><appender name&#61;"CONSOLE" class&#61;"ch.qos.logback.core.ConsoleAppender"><filter class&#61;"ch.qos.logback.classic.filter.ThresholdFilter"><level>infolevel>filter><encoder><Pattern>${CONSOLE_LOG_PATTERN}Pattern><charset>UTF-8charset>encoder>appender><appender name&#61;"DEBUG_FILE" class&#61;"ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/log_debug.logfile><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern><charset>UTF-8charset>encoder><rollingPolicy class&#61;"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.logfileNamePattern><timeBasedFileNamingAndTriggeringPolicy class&#61;"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MBmaxFileSize>timeBasedFileNamingAndTriggeringPolicy><maxHistory>15maxHistory>rollingPolicy><filter class&#61;"ch.qos.logback.classic.filter.LevelFilter"><level>debuglevel><onMatch>ACCEPTonMatch><onMismatch>DENYonMismatch>filter>appender><appender name&#61;"INFO_FILE" class&#61;"ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/log_info.logfile><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern><charset>UTF-8charset>encoder><rollingPolicy class&#61;"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.logfileNamePattern><timeBasedFileNamingAndTriggeringPolicy class&#61;"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MBmaxFileSize>timeBasedFileNamingAndTriggeringPolicy><maxHistory>15maxHistory>rollingPolicy><filter class&#61;"ch.qos.logback.classic.filter.LevelFilter"><level>infolevel><onMatch>ACCEPTonMatch><onMismatch>DENYonMismatch>filter>appender><appender name&#61;"WARN_FILE" class&#61;"ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/log_warn.logfile><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern><charset>UTF-8charset>encoder><rollingPolicy class&#61;"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.logfileNamePattern><timeBasedFileNamingAndTriggeringPolicy class&#61;"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MBmaxFileSize>timeBasedFileNamingAndTriggeringPolicy><maxHistory>15maxHistory>rollingPolicy><filter class&#61;"ch.qos.logback.classic.filter.LevelFilter"><level>warnlevel><onMatch>ACCEPTonMatch><onMismatch>DENYonMismatch>filter>appender><appender name&#61;"ERROR_FILE" class&#61;"ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/log_error.logfile><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern><charset>UTF-8charset>encoder><rollingPolicy class&#61;"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.logfileNamePattern><timeBasedFileNamingAndTriggeringPolicy class&#61;"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MBmaxFileSize>timeBasedFileNamingAndTriggeringPolicy><maxHistory>15maxHistory>rollingPolicy><filter class&#61;"ch.qos.logback.classic.filter.LevelFilter"><level>ERRORlevel><onMatch>ACCEPTonMatch><onMismatch>DENYonMismatch>filter>appender><appender name&#61;"ASYNC-INFO" class&#61;"ch.qos.logback.classic.AsyncAppender"><discardingThreshold>0discardingThreshold><queueSize>256queueSize><appender-ref ref&#61;"INFO-LOG"/>appender><appender name&#61;"ASYNC-ERROR" class&#61;"ch.qos.logback.classic.AsyncAppender"><discardingThreshold>0discardingThreshold><queueSize>256queueSize><appender-ref ref&#61;"ERROR-LOG"/>appender><springProfile name&#61;"dev"><logger name&#61;"com.haoqian" level&#61;"info"/>springProfile><root level&#61;"info"><appender-ref ref&#61;"CONSOLE"/><appender-ref ref&#61;"DEBUG_FILE"/><appender-ref ref&#61;"INFO_FILE"/><appender-ref ref&#61;"WARN_FILE"/><appender-ref ref&#61;"ERROR_FILE"/>root>



configuration>

第二步&#xff1a;配置文件application.yml 中配置日志文件位置 &#xff08;如果 日志文件名为logback-spring.xml且放在resources路径下可一不配置&#xff09;

spring:......
logging:config: classpath:logback-spring.xml

第三步&#xff1a;使用Logger对象打印日志

方式一&#xff1a;使用工厂创建

&#64;RestController
public class EmployeeController {private final Logger log &#61; LoggerFactory.getLogger(this.getClass());&#64;GetMapping("testCustomException/{num}")&#64;TraceLogpublic Result testCustomException(&#64;PathVariable("num") int num) {try {int a &#61; 10 / num;return Result.success().data(a);} catch (Exception e) {log.error("error:", e);return Result.failure(ResultCodeEnum.PARAM_IS_INVALID);}}
}

方式二&#xff1a;使用lombok简化

import lombok.extern.slf4j.Slf4j;&#64;Slf4j
&#64;RestController
public class EmployeeController {&#64;GetMapping("testCustomException/{num}")&#64;TraceLogpublic Result testCustomException(&#64;PathVariable("num") int num) {try {int a &#61; 10 / num;return Result.success().data(a);} catch (Exception e) {log.error("error:", e);return Result.failure(ResultCodeEnum.PARAM_IS_INVALID);}}
}

注意&#xff1a;其中的Result和ResultCodeEnum类来源于另一片文章介绍的 “Java 统一封装响应结果”
https://blog.csdn.net/QiuHaoqian/article/details/113493682







2 验证

发送请求 http://localhost:8080/testCustomException/0

控制台日志打印如下&#xff1a;
在这里插入图片描述
日志打印文件如下&#xff1a;
在这里插入图片描述


推荐阅读
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
author-avatar
颖子_忒美
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有