logback的简单配置与日志实现

摘要:
--logback框架的必需依赖项--˃org。slf4j</groupId><artifactId>slf4j api</authenticationId><version>1.7.21</version><dependency><groupId><ch.qos.logback</groupId><artifactId>logback core</authocationId>˂version>1.1.7</version></adependency<dependency><groupId><ch。qos。logbacklogbackclassic1.1.7˃${pattern}INFOACCEPTDENY3GB˂!

目录
一、前言

1.1 创建配置文件

Maven项目中,在recourse目录下创建:logback-test.xmllogback.xml 文件夹

推荐在测试环境中创建 logback-test.xml 文件,生产环境中创建 logback.xml 文件

找不到两个配置文件时,logback框架会按照默认配置在控制台输出日志语句

结构如下:

logback的简单配置与日志实现第1张

1.2 引入依赖

logback的依赖包必须是1.1.7或以上版本,否则找不到 SizeAndTimeBasedRollingPolicy

测试使用1.1.6版本启动程序,报错:

logback的简单配置与日志实现第2张

<!-- logback框架所需依赖 -->
<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.21</version>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.1.7</version>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.1.7</version>
    </dependency>
</dependencies>
二、配置文件内容与详解
<?xml version="1.0" encoding="UTF-8"?>
<!-- debug=true时,如果配置文件的配置有问题,logback 会检测到这个错误并且在控制台打印它的内部状态,默认为false -->
<configuration debug="false">
    <!-- 定义日志文件的存储地址,推荐使用绝对路径(使用转义字符表示目录层级) -->
    <property name="LOG_HOME" value="D:\ProceduralWorld\idea\MyProgram\MyUtil\src\main\resources\logs" />

    <!-- 定义日志内容的输出格式:%d表示日期(年-月-日 时:分:秒:毫秒)
                        %thread:表示线程名(不一定是执行的方法名)
                        %-5level:级别从左显示5个字符宽度
                        %logger{50}:所在类{显示路径的字符数}
                        %msg:日志消息
                        %n:换行符 -->
    <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />

    <!-- 控制台输出的配置 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 日志输出级别:仅输出INFO级别 -->
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <!-- RollingPolicy 负责发生什么:轮转的方式为移动文件以及对文件改名 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名:以下设置为按天轮转,超过设置的文件大小时生成新文件,新文件的i值最大。
                    i值默认从0开始,否则从指定文件中的最大i值开始 -->
            <!--<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd_HH-mm}.txt</FileNamePattern>-->
            <FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/info.log.%i</FileNamePattern>
            <!-- 单个日志文件最大容量 -->
            <MaxFileSize>500KB</MaxFileSize>
            <!-- 日志文件保留天数 -->
            <MaxHistory>60</MaxHistory>
            <!-- 设置最大大小为3GB -->
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 与控制台的输出方式保持一致 -->
            <pattern>${PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 日志输出级别:仅输出WARN级别 -->
    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <!-- RollingPolicy 负责发生什么:轮转的方式为移动文件以及对文件改名 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名:以下设置为按天轮转,超过设置的文件大小时生成新文件,新文件的i值最大。
                    i值默认从0开始,否则从指定文件中的最大i值开始 -->
            <!--<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd_HH-mm}.txt</FileNamePattern>-->
            <FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warn.log.%i</FileNamePattern>
            <!-- 单个日志文件最大容量 -->
            <MaxFileSize>500KB</MaxFileSize>
            <!-- 日志文件保留天数 -->
            <MaxHistory>60</MaxHistory>
            <!-- 设置最大大小为3GB -->
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 与控制台的输出方式保持一致 -->
            <pattern>${PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 日志输出级别:仅输出ERROR级别 -->
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <!-- RollingPolicy 负责发生什么:轮转的方式为移动文件以及对文件改名 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名:以下设置为按天轮转,超过设置的文件大小时生成新文件,新文件的i值最大。
                    i值默认从0开始,否则从指定文件中的最大i值开始 -->
            <!--<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd_HH-mm}.txt</FileNamePattern>-->
            <FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/error.log.%i</FileNamePattern>
            <!-- 单个日志文件最大容量 -->
            <MaxFileSize>500KB</MaxFileSize>
            <!-- 日志文件保留天数 -->
            <MaxHistory>60</MaxHistory>
            <!-- 设置最大大小为3GB -->
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 与控制台的输出方式保持一致 -->
            <pattern>${PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 日志输出级别:仅输出ERROR级别 -->
    <root level="INFO">
        <!-- 输出到控制台: INFO级别以上的日志 -->
        <appender-ref ref="STDOUT" />
        <!-- 输出到文件:INFO级别 -->
        <appender-ref ref="INFO" />
        <!-- 输出到文件:WARN级别 -->
        <appender-ref ref="WARN" />
        <!-- 输出到文件:ERROR级别 -->
        <appender-ref ref="ERROR" />
    </root>
</configuration>
三、代码演示
package com.zhiyin.test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyTest {
    private static final Logger LOGGER = LoggerFactory.getLogger(MyTest.class);

    public static void main(String[] args) {
        for (int i = 0; i < 50; i++) {
            LOGGER.debug("name: {},age: {}", "知音", 22);  // 按配置将不输出
            LOGGER.info("name: {},age: {}", "知音", 22); 
            LOGGER.warn("name: {},age: {}", "知音", 22);  
            LOGGER.error("name: {},age: {}", "知音", 22);
            if (i > 47) {
                LOGGER.info("--------------------");
                LOGGER.warn("--------------------");
                LOGGER.error("--------------------");
            }
        }
    }

}
四、实现效果
  1. 按照日志的级别,每种级别将写入到不同的级别名.txt文件中

  2. 轮转方式为一天,每一天的日志文件将保存到当前日期的文件目录中

  3. 日志文件大小超过配置的容量大小时,将在当前目录下创建新的日志文件,文件序号加1

日志目录及生成的日志文件如下:

logback的简单配置与日志实现第3张

五、有点感言

以往之前,都忽略了项目日志的重要性,其实不想去学也是一方面。但是直到最近在写几个自己的程序和工作项目中大佬架构出的优秀日志框架,才引发了对于项目中使用日志的重要性,而不是简简单单地一句 System.out.println(),日志的好处其实多了去,但是对于目前的我来说,主要以下两点:

  1. 日志文件设置为按照天数来轮转的,并且对日志级别存储不同的文件里进行了处理,还算是比较有序,那么即使是以后也能找到某一天的日志文件来查看或回顾,而不是一句简单的控制台输出语句,输出完看过一遍就完了

  2. 学习,通过不会使用但是想用的欲望来逼迫自己去学,最后总结出一套自己的知识点。即便现在技术博客如此之多,但是总有不全之处和不负责任的博文存在,越看越乱。于是只能找到框架官网或项目的开源地址或中文官网去细细领会,一步步上手,终有结果。

参考链接:

免责声明:文章转载自《logback的简单配置与日志实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python——XPath提取某个标签下所有文本修改 tomcat 内存下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Logback 也爆雷了,惊爆了。。。

Logback 也爆雷了 Log4j2 漏洞最新进展: Log4j 2.3.1 发布!又是什么鬼?? Log4j2 核弹级漏洞刚结束没几天,Logback 其实也爆雷了,这你能信?? 栈长在上篇文章提到,因 Log4j2 漏洞的反复无常,导致某些公司已经切换到 Logback 了,如果这也是你们公司的决定,请在文章下面评论区留言。 可令栈长万万想不到的是,...

第10章 数据库恢复技术 | 数据库知识点整理

第10章 数据库恢复技术 了解 数据库的一致性状态 数据库运行中可能产生的故障类型,它们如何影响事务的正常执行,如何破坏数据库数据 数据转储的概念及分类 数据库的镜像功能 掌握 事务的基本概念和事务的ACID性质 数据库恢复的实现技术 日志文件的内容及作用 登记日志文件所要遵循的原则 具有检查点的恢复技术 恢复的基本原理 针对不同故障的恢复策略和方法...

树莓派开启crontab日志

crontab是Linux下类似Windows计划任务的一个程序,之前利用过这个程序来设定闹钟。后来发现找不到执行任务之后产生的日志文件。有时候需要配合日志文件作一些调试功能,经过一番折腾发现,系统默认禁止了日志文件的产生,重新开启即可。 实验环境 硬件:树莓派3b一台 操作系统:Raspbian with desktop 配置日志文件rsyslog.c...

ubuntu日志的设置

ubuntu日志的设置 | Marshal's Blog ubuntu日志的设置 日志用于帮助系统出错后的排查。在ubuntu server版本中,syslog命令用于设置日志。 设置syslog ubuntu server中,由syslogd进程处理日志。通过ps命令输出的syslogd进程信息: syslog 4275 1 0 2008 ? 00:...

Oracle 后台进程 详细说明

一. 进程概述 先来看一下Oracle 11g 的架构图。 看起来比较模糊,我已经上传到了csdn 的下载。 是个pdf 文件, 2m 多。 那个看起来比较清楚。 也对每个进程做了解释。 下载地址:Oracle 11g 架构图 from Oracle University http://download.csdn.net/source/2346700 进...

mysql日志文件开启及详解:General_log 和 Binlog

General_log 详解 1.介绍 开启 general log 将所有到达MySQL Server的SQL语句记录下来。 一般不会开启开功能,因为log的量会非常庞大。但个别情况下可能会临时的开一会儿general log以供排障使用。相关参数一共有3:general_log、log_output、general_log_file show var...