logback日志按照类型输出到不同文件

这篇具有很好参考价值的文章主要介绍了logback日志按照类型输出到不同文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

公司要将项目的日志分为不同的类别,如所有日志、请求日志、错误日志和 SQL 日志。

目前使用的日志框架为slf4j + logback。

思路

要将日志分为不同的类别,可以使用 Logback 的日志级别和过滤器来实现。

然后,可以针对特定的日志类型设置不同的日志级别和过滤器。

实现前知识准备

Logback 的appender标签

在 Logback 中,<appender> 用于定义日志输出的目标。Logback 提供了多种类型的 appender,可以将日志记录输出到不同的目标,如控制台、文件、数据库等。

以下是 Logback 常用的 appender 类型:

ConsoleAppender:将日志输出到控制台。

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">     
	<encoder>
   		<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
	 </encoder>
 </appender>

FileAppender:将日志输出到文件。

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
	<file>/path/to/logfile.log</file>    
 	<encoder> 
         <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>   
 	</encoder>
 </appender>

RollingFileAppender:将日志输出到滚动的文件,可以按照一定规则(如时间、文件大小)拆分日志文件。

<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">     <file>/path/to/logfile.log</file>
	<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
		<fileNamePattern>/path/to/logfile-%d{yyyy-MM-dd}.log</fileNamePattern>   
		<maxHistory>30</maxHistory>
	</rollingPolicy>
	<encoder>
		<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
	</encoder> 
</appender>

这些只是一些常用的 appender 类型,Logback 还提供了更多的 appender,如 SyslogAppender、SMTPAppender 等,可以根据实际需求选择适合的 appender。

在 Logback 的配置文件中,可以通过 <appender-ref> 引用相应的 appender,并将其关联到特定的 logger 上,以实现日志的输出目标配置。

Logback 的logger标签

Logback 的 <logger> 标签用于定义日志记录器,可以根据包名或类名来区分不同的日志记录器,并设置相应的日志级别和输出目标。

以下是一个示例的 <logger> 标签的配置:

<configuration> 
    <!-- 其他配置 --> 
      <logger name="com.example.package" level="DEBUG">  
           <appender-ref ref="CONSOLE"/> 
           <appender-ref ref="FILE"/> 
      </logger>   
 <!-- 其他配置 -->
  </configuration>

在上述示例中,<logger> 标签的 name 属性指定了要匹配的包名或类名(通常使用包名),level 属性指定了日志级别。

可以在 <logger> 标签内部使用 <appender-ref> 标签来引用定义好的 <appender>,以将日志记录到相应的输出目标(如控制台、文件等)。

注意,Logback 会按照 Logger 配置的顺序进行匹配,因此在配置文件中,一般将高优先级的 Logger 放在前面。

可以使用通配符来匹配多个包名或类名,例如:

<logger name="com.example.package.*" level="DEBUG">   
  <!-- 配置 -->
 </logger>

上述配置将匹配以 “com.example.package.” 开头的所有类。

此外,还可以配置 <logger> 的其他属性,如 additivity 属性用于指定是否将日志事件传递给更高层次的 Logger。

总结来说,<logger> 标签用于定义不同的日志记录器,并通过设置级别和输出目标来控制日志的记录行为。文章来源地址https://www.toymoban.com/news/detail-599685.html

具体实现

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 日志文件目录 -->
    <property name="LOG_PATH" value="logs"/>
    <!-- 日志文件名称 -->
    <property name="LOG_NAME" value="report"/>

    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}}/${LOG_NAME:-application}"/>
    <property name="LOG_FILE_ERROR" value="${LOG_FILE_ERROR:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}}/${LOG_NAME:-application}-error"/>
    <property name="LOG_FILE_REQUEST" value="${LOG_FILE_REQUEST:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}}/${LOG_NAME:-application}-request"/>
    <property name="LOG_FILE_SQL" value="${LOG_FILE_SQL:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}}/${LOG_NAME:-application}-sql"/>
    <property name="LOG_FILE_SUFFIX" value="${LOG_FILE_SUFFIX:-${LOG_NAME_EXTENSION:-gz}}"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />

    <!-- 所有日志 Appender -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.${LOG_FILE_SUFFIX}</fileNamePattern>
            <maxFileSize>${LOG_FILE_MAX_SIZE:-20MB}</maxFileSize>
            <maxHistory>${LOG_FILE_MAX_HISTORY:-14}</maxHistory>
            <totalSizeCap>${LOG_FILE_TOTAL_SIZE_CAP:-1GB}</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!-- ERROR日志 Appender -->
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE_ERROR}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_ERROR}.%d{yyyy-MM-dd}.%i.${LOG_FILE_SUFFIX}</fileNamePattern>
            <maxFileSize>${LOG_FILE_MAX_SIZE:-20MB}</maxFileSize>
            <maxHistory>${LOG_FILE_MAX_HISTORY:-14}</maxHistory>
            <totalSizeCap>${LOG_FILE_TOTAL_SIZE_CAP:-1GB}</totalSizeCap>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
    </appender>

    <!-- 请求日志 Logger -->
    <appender name="FILE_REQUEST" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE_REQUEST}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${LOG_FILE_REQUEST}.%i.${LOG_FILE_SUFFIX}</fileNamePattern>
            <minIndex>${LOG_FILE_MIN_INDEX:-1}</minIndex>
            <maxIndex>${LOG_FILE_MAX_INDEX:-3}</maxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>${LOG_FILE_MAX_SIZE:-20MB}</maxFileSize>
        </triggeringPolicy>
    </appender>
    <!-- 显示请求URL -->
    <logger name="org.springframework.web.servlet.DispatcherServlet" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE_REQUEST" />
    </logger>
    <!-- 显示请求映射Controller -->
    <logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE_REQUEST" />
    </logger>
    <!-- 显示请求返回内容 -->
    <logger name="org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE_REQUEST" />
    </logger>

    <!-- SQL日志 Logger -->
    <appender name="FILE_SQL" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE_SQL}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${LOG_FILE_SQL}.%i.${LOG_FILE_SUFFIX}</fileNamePattern>
            <minIndex>${LOG_FILE_MIN_INDEX:-1}</minIndex>
            <maxIndex>${LOG_FILE_MAX_INDEX:-3}</maxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>${LOG_FILE_MAX_SIZE:-20MB}</maxFileSize>
        </triggeringPolicy>
    </appender>
    <logger name="SQL" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE_SQL" />
    </logger>

    <logger name="com.shsnc" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE_ERROR" />
    </logger>

    <root level="WARN">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILE_ERROR" />
    </root>

</configuration>

到了这里,关于logback日志按照类型输出到不同文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot日志使用 SLF4J+Logback 实现(springboot默认的日志实现),日志打印到控制台及日志输出到指定文件

    还是直接上代码 @Slf4j 这玩意 默认支持 不用引入 yml 配置文件 下面分享 xml 方式 在 资源目录下创建 logback-spring.xml 粘贴走 即可 重启 看控制台变化 还有磁盘 有没有写入 坑 : 我在创建的时候 发现 xml 没有生效 排查了半天 发现 在创建 logback-spring.xml 这个文件的时候 我不是手

    2024年04月22日
    浏览(80)
  • 23、springboot日志使用入门-- SLF4J+Logback 实现(springboot默认的日志实现),日志打印到控制台及日志输出到指定文件

    就是springboot的默认的日志依赖实现。创建项目的时候存在这个依赖里面。 下面的日志实现就是基于 SLF4J+Logback SLF4J+Logback:SLF4J是门面,Logback是实现 设置日志的级别,可通过以下方式: ▲ 改变Spring Boot的核心日志级别 ▲ 改变程序组件(包括所有各种框架)的核心日志级别

    2024年02月03日
    浏览(61)
  • 【日志技术——Logback日志框架】

    1.引出 我们通常展示信息使用的是输出语句,但它有弊端,只能在控制台展示信息,不能灵活的指定日志输出的位置(文件,数据库),想加入或取消日志,需要修改源代码 2.日志技术 可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库中) 可以随

    2024年02月09日
    浏览(36)
  • 由jar包冲突导致的logback日志不输出

    最近接手一个厂商移交的项目,发现后管子系统不打印日志。 项目使用的logback 本地断点调试发现logback-classic jar冲突导致 打出的war中没有 相关的jar 解决方法: 去除pom 文件中多余的 logback-classic 应用,只保留最新版本的。 重新打包环境后,日志可正常输出。 java是如何

    2024年01月20日
    浏览(42)
  • Logback日志框架配置使用

    一、简述 Logback一个通用、快速而又灵活的Java日志框架。主要分为三个模块组成 logback-core: 其他两个模块的基础模块 logback-classic: 由log4j的改良版本,完整实现了slf4j的API,所以可以很方便的更换成其他日志系统如log4j或者JDK14 Logging logback-access:访问模块和Servlet容器集成提

    2024年02月11日
    浏览(44)
  • 日志框架 --- Logback

    Logback是一个用于Java应用程序的日志框架,它由log4j框架的创始人Ceki Gülcü开发。logback是log4j框架的继承者和改进版,并提供了更好的性能、可扩展性和灵活性。与Log4j相比,Logback提供了更快的速度和更低的内存占用,这使得它成为大型企业级应用程序的理想选择。 Logback包括

    2024年02月08日
    浏览(40)
  • Java Logback日志框架概述及logback.xml详解

    日志技术具备的优势 可以将系统执行的信息选择性的记录到指定的位置(控制台、文件中、数据库中)。· 可以随时以开关的形式控制是否记录日志,无需修改源代码。 日志体系结构 Logback日志框架 Logback是由log4j创始人设计的另一个开源日志组件,性能比log4j要好 Logback是基于

    2024年02月10日
    浏览(62)
  • logback日志框架基本知识

    本文来说下logback日志框架基本知识 Spring Boot已经将logback做为默认集成的日志框架,全面了解学习是必然了。曾经log4j是流行的日志框架,现在已被它的继任者logback替代,logback更快,更小,更灵活。当然,如果你的项目中还在用System.out.println()来输出内容,那更是得行动起来

    2024年02月11日
    浏览(46)
  • spring整合logBack日志框架:

    SLF4J(Simple Logging Facade for Java)是一种日志规范,类似于JDBC,我们常用的日志log4j、logback等都实现了这个规范,所以我们可以直接使用SLF4J的规范来使用日志。 它们是同一个作者开发的,logback是重新编写的内核,在一些关键执行的路径上提升了10倍以上。它也支持了一些新的

    2024年02月12日
    浏览(41)
  • Logback是最好用的日志框架吗?Logback快速入门

    日志技术可以将系统执行的信息选择性的记录到指定的位置(控制台、文件中、数据库中)。随时以开关的形式控制是否记录日志,无需修改源代码,就可以取消或者记录信息。并且牛人或者第三方公司已经做好的日志记录实现代码,开发者可以直接拿来使用。 常见的日志框架

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包