日志框架Slf4j和Logback的使用说明

1.什么是日志框架

  • 是一套能实现日志输出的工具包
  • 能够描述系统运行状态的所有时间可以算作日志
    • 用户下线
    • 接口超时
    • 数据库崩溃

2.日志框架的能力

  • 定制输出目标
    • 可以以文件的形式储存在固定的地方
    • 日志文件的滚动策略,如一天一个数据文件等
    • 日志存到数据库等要求
  • 定制输出格式,方便后期加工和处理
  • 携带上下文信息
  • 运行时选择性输出,不同情况下输出的内容不同
  • 灵活的配置
  • 优异的性能

3.常见的日志框架

日志门面日志实现
Apache :JCLLog4j
SLF4jLog4j2
jboss-loggingLogback
Java:JUL

最优框架:SLF4j+Logback

4.日志框架的使用

4.1Slf4j的使用

1.基本使用
  • 首先基于SpringBoot搭建框架,然后书写测试类

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class LoggerTest {
        //选择slf4j下的类,同时填写当前类的类名,这样打印出来的日志也是当前类的全包名。
        //当然也可以设置其他的类名,那么就会打印出设置的类名
        private final Logger logger=LoggerFactory.getLogger(LoggerTest.class);
    
        @Test
        public void test1(){
            logger.debug("--debug--");
            logger.info("--info--");
            logger.error("--error--");
        }
    }
    

    打印后查看控制台信息,日志是当前类的全包名

    2018-10-20 16:46:21.391  INFO 23112 --- [           main] com.antfin.sell.LoggerTest               : --info--
    2018-10-20 16:46:21.391 ERROR 23112 --- [           main] com.antfin.sell.LoggerTest               : --error--
    
    

    这是因为默认的日志级别是info,小于info级别的日志不会打印。

    可以查看org.slf4j.event查看日志级别

     ERROR, 
     WAR, 
     INFO,
     DEBUG, 
     TRACE;
    
2.使用lombok工具
  • 改进日志类,每次都需要写入当前类比较麻烦,可以使用lombok插件来简化

    • 添加依赖
    <dependency>
    	<groupId>org.projectlombok</groupId>
    	<artifactId>lombok</artifactId>
    </dependency>
    
    • 使用注释Slf4j,变量名称直接为log
    @RunWith(SpringRunner.class)
    @SpringBootTest
    //lombok.extern.slf4j.Slf4j;
    @Slf4j 
    public class LoggerTest2 {
    
        @Test
        public void test1(){
            log.debug("--debug--");
            log.info("--info--");
            log.error("--error--");
        }
    }
    

    注意:如果找不到log变量,那么添加idea需要添加插件Lombok Plugin,再重启即可。

3.日志中打印出变量
  • 使用占位符{}
String name="imooc";
String pass="123456";
log.info("name:{},pass:{}",name,pass);

4.2Logback的配置

  • application.yml 比较简单。只能配置路径和输出格式等简单的操作。
  • logback-spring.xml 比较复杂,但是相应的功能也比较强大。
4.2.1 需求出发
  • 区分info和error日志
  • 每天产生一个日志文件
4.2.2 application.yml
logging:
  pattern:
    console: "%d - %msg%n"
  #path: F:\logs\springboot
  file: F:\logs\springboot\sell.log
  level:
     com:  debug

具体的可以根据注释看到:

  • path和file都是指定路径的,但是file可以指定文件名
  • 对于指定级别 指定范围可以指定类,也可以说是包名。或者直接是root
4.2.3 logback-spring.xml
  • logback-spring.xml位于resources目录下
1.基本版

注意格式要正确,因为没有提示要小心出错。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <!--控制台的输出-->
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <!--展示格式-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                %d - %msg%n
            </pattern>
        </layout>
    </appender>
    <!--范围和级别 root整个项目都适用-->
    <root level="info">
        <appender-ref ref="consoleLog"/>
    </root>
</configuration>
2.配置到输出文件,且每天产生一个日志文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <!--输出文件的配置-->
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>
                %msg%n
            </pattern>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>F:\logs\sell\info.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>
    <!--范围和级别 root整个项目都适用-->
    <root level="info">
        <appender-ref ref="fileInfoLog"/>
    </root>
</configuration>
3.区分info和error日志
  • 对于error的日志只需要在其节点内加入<filter></filter>进行过滤即可,意思是只拦截Error及以上级别的日志,所以只想保留INFO是不可以的

    <!--根据范围来过滤-->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    	<level>ERROR</level>
    </filter>
    
  • 对于info的日志也使用标签<filter></filter>,但使用另外一个类LevelFilter,点击该类可以看到有三个DENY\NEUTRAL\ACCEPT 操作。如果选择ACCEPT,则 则使用该条规则,选择NEUTRAL则忽略该条规则。

    <!--根据范围来过滤-->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <!--符合级别就过滤掉-->
        <onMatch>DENY</onMatch>
        <!--符合就接受-->
        <onMismatch>ACCEPT</onMismatch>
    </filter>
    
  • 完整的日志配置规则

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

    <!--控制台的输出-->
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <!--展示格式-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                %d - %msg%n
            </pattern>
        </layout>
    </appender>

    <!--输出文件的配置  INFO-->
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--根据范围来过滤-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <!--符合级别就过滤掉-->
            <onMatch>DENY</onMatch>
            <!--符合就接受-->
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder>
            <pattern>
                %msg%n
            </pattern>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>F:\logs\sell\info.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>

    <!--输出文件的配置-->
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--根据范围来过滤-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>
                %msg%n
            </pattern>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>F:\logs\sell\error.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>
    <!--范围和级别 root整个项目都适用-->
    <root level="info">
        <appender-ref ref="consoleLog"/>
        <appender-ref ref="fileInfoLog"/>
        <appender-ref ref="fileErrorLog"/>
    </root>
</configuration>

5.进阶

logback的使用和logback.xml详解

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SLF4J 是一个简单的日志门面,它提供了一组日志 API,可以与许多流行的日志框架(例如 logback、log4j、java.util.logging)集成。而 logback 则是一个功能强大的日志框架,它是 log4j 框架的继承者,提供了更好的性能和更丰富的特性。 要使用 SLF4J + logback 实现日志输出和记录,需要按照以下步骤进行: 1. 引入依赖:在项目的 pom.xml 文件中加入以下依赖: ``` <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> ``` 2. 配置 logback.xml 文件:在项目的 src/main/resources 目录下创建 logback.xml 文件,并配置日志输出的格式、级别、输出目标等信息。以下是一个简单的 logback.xml 配置示例: ``` <configuration> <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> <root level="INFO"> <appender-ref ref="console" /> </root> </configuration> ``` 该配置将日志输出到控制台中,并显示日志的时间、线程、级别、类名和消息内容。 3. 在代码中使用 SLF4J API:在需要记录日志的代码中,使用 SLF4J API 进行日志记录。以下是一个示例: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyClass { private static final Logger LOGGER = LoggerFactory.getLogger(MyClass.class); public void doSomething() { LOGGER.info("This is a log message."); } } ``` 在这个示例中,我们使用 LoggerFactory.getLogger() 方法获取了一个 Logger 对象,并使用该对象进行日志记录。在记录日志时,我们使用了 LOGGER.info() 方法,指定日志的级别为 INFO。 以上就是使用 SLF4J + logback 实现日志输出和记录的基本步骤。通过 SLF4J,我们可以方便地切换不同的日志框架,而 logback 则提供了强大的日志功能,例如异步日志记录、定时滚动日志文件等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值