Logback:只输出Info和Error级别的日志,并输出到不同的文件

简介: Logback:只输出Info和Error级别的日志,并输出到不同的文件

前言

本文基于以下扩展(点击即可查看):

Logback:同时按照日期和大小分割日志(最新日志可以不带日期或数字)


logback配置

<?xml version="1.0" encoding="UTF-8"?>
<!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志输出规则  根据当前ROOT 级别,日志输出时,级别高于root默认的级别时  会输出 -->
<!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志-->
<!-- 属性描述
scan:设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!--定义日志文件的存储地址 -->
    <property name="LOG_HOME" value="/usr/csizg/tomcat-log/DenseTubeManage" />
    <!-- 控制台输出 -->
  <appender name="ConsoleLog" class="ch.qos.logback.core.ConsoleAppender">
  <encoder>
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    <charset>UTF-8</charset>
  </encoder>
  </appender>
    <!--Info文件输出-->
  <!-- 按照每天和固定大小(5MB)生成日志文件【最新的日志,是日期最大数字最大的】 -->
   <appender name="FileInfoLog"  class="ch.qos.logback.core.rolling.RollingFileAppender">
         <!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高,
       所以我们使用下面的策略,可以避免输出 Error 的日志,这种方式不能避免warn-->
         <!-- 过滤日志 -->
         <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">
             &lt;!&ndash;过滤 Error&ndash;&gt;
             <level>ERROR</level>
             &lt;!&ndash;匹配到就禁止&ndash;&gt;
             <onMatch>DENY</onMatch>
             &lt;!&ndash;没有匹配到就允许&ndash;&gt;
             <onMismatch>ACCEPT</onMismatch>
         </filter>-->
         <!--只输出INFO-->
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <!--过滤 INFO-->
             <level>INFO</level>
             <!--匹配到就禁止-->
             <onMatch>ACCEPT</onMatch>
             <!--没有匹配到就允许-->
             <onMismatch>DENY</onMismatch>
         </filter>
         <!--滚动策略-->
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
             <!--日志文件输出的文件名-->
             <FileNamePattern>${LOG_HOME}/Info/DenseTubeManage_Info_%d{yyyy-MM-dd}.%i.log</FileNamePattern>
             <!--日志文件保留天数-->
             <MaxHistory>30</MaxHistory>
             <!--日志文件最大的大小-->
             <MaxFileSize>5MB</MaxFileSize>
         </rollingPolicy>
         <!--格式化输出-->
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
             <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
             <charset>UTF-8</charset>
         </encoder>
     </appender>
    <!--Error文件输出-->
    <!-- 按照每天和固定大小(5MB)生成日志文件【最新的日志,是日期最大数字最大的】 -->
    <appender name="FileErrorLog"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--设置日志级别,过滤掉info日志,只输入error日志-->
            <level>ERROR</level>
        </filter>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/Error/DenseTubeManage_Error_%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <!--日志文件最大的大小-->
            <MaxFileSize>5MB</MaxFileSize>
        </rollingPolicy>
        <!--格式化输出-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!--日志等级设置-->
  <logger name="org.springframework" level="error"></logger>
  <root level="info">
        <appender-ref ref="ConsoleLog"/>
  </root>
    <logger name="com.csizg" level="info">
        <appender-ref ref="FileInfoLog"/>
        <appender-ref ref="FileErrorLog"/>
    </logger>
</configuration>


/说明

Linux中根目录用/表示。而windows表示目录的方式与Linux有所不同,Windows下有磁盘分区的概念,而Linux下只有目录的概念,所以‘/’所表示的意义在两个系统中有所不同。

 

  ‘/’在linux中表示根目录。在Linux系统中,除根目录(root)以外,所有文件和目录都包含在相应的目录文件中。Linux文件系统采用带链接的树形目录结构,即只有一个根目录(通常用“/”表示),其中含有下级子目录或文件的信息;子目录中又可含有更下级的子目录或者文件的信息。这样一层一层地延伸下去,构成一棵倒置的树。    


  ‘/’在windows中也表示根目录,但此跟目录非彼根目录。windows对磁盘分区后会有多个磁盘,通常系统会装在C盘。windows有多个磁盘所以就会有‘多个根目录’,在dos命令模式下,在D盘的某文件夹中输入‘cd/’命令回车后会直接回到D盘的根目录。其它磁盘下也会回到该磁盘的目录。在哪个磁盘下使用‘/’,它就表示哪个磁盘的根目录


测试类

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * @Title: Logback测试
 * @ClassName: com.csizg.logback.LogbackTest.java
 * @Description:
 *
 * @Copyright 2019   Powered By 研发中心
 * @author: FLY
 * @date:  2019-04-03 16:56
 * @version V1.0
 */
//@Slf4j
public class LogbackTest {
    private final static Logger log = LoggerFactory.getLogger(LogbackTest.class);
    @Test
    public void LogLevelTest(){
        log.debug("debug日志");
        log.info("info日志");
        log.warn("warn日志");
        log.error("error日志");
    }
}


输出效果:


Error日志


Info日志


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
25天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
78 1
|
1月前
|
Shell Linux C语言
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
29 0
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
51 0
|
1天前
|
Android开发
双击eclipse提示an error has occurred See the log file E:\javatool\eclipse-mars-2\configuration\156991769
双击eclipse提示an error has occurred See the log file E:\javatool\eclipse-mars-2\configuration\156991769
6 1
|
2天前
|
运维 监控 前端开发
[SpringAop + Logback +MDC] 现网必备全链路日志追踪
[SpringAop + Logback +MDC] 现网必备全链路日志追踪
|
7天前
|
运维 Oracle 关系型数据库
Oracle日志文件:数据王国的“记事本”
【4月更文挑战第19天】Oracle日志文件是数据库稳定运行的关键,记录数据变更历史,用于恢复和故障处理。它们协调并发操作,确保数据一致性和完整性。日志文件实时写入操作信息并定期刷新到磁盘,便于数据恢复。然而,日志文件需备份和归档以保证安全性,防止数据丢失。日志文件,数据王国的“记事本”,默默守护数据安全。
|
29天前
|
监控 Java 测试技术
日志框架到底是Logback 还是 Log4j2
日志框架到底是Logback 还是 Log4j2
20 0
|
1月前
|
SQL JSON Kubernetes
Seata常见问题之服务端 error日志没有输出,客户端执行sql报错如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
106 0
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 实时监控日志文件 swatch命令 使用指南
【Shell 命令集合 系统管理 】Linux 实时监控日志文件 swatch命令 使用指南
36 1
|
24天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
77 1