热门标签 | 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;
在这里插入图片描述


推荐阅读
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 在工业过程控制系统中,由于被控对象的环境比较恶劣,干扰源比较多,仪器、仪表采集的信息常会受到干扰,所以在模拟系统中,为了消除干扰,常采用RC滤波电路,而在由工业控制计算机组成的自动 ... [详细]
  • 本文详细介绍了数据库并发控制的基本概念、重要性和具体实现方法。并发控制是确保多个事务在同时操作数据库时保持数据一致性的关键机制。文章涵盖了锁机制、多版本并发控制(MVCC)、乐观并发控制和悲观并发控制等内容。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
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社区 版权所有