日志:slf4j+logback 的配置与使用
1. 常用日志组件和选择
日志实现
log4j
log4j2
2. 日志的使用
- package com.lonely;
- import lombok.extern.slf4j.Slf4j;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.test.context.junit4.SpringRunner;
- /**
- * Created by 15072 on 2018/1/6.
- */
- @RunWith(SpringRunner.class)
- @SpringBootTest
- public class LoggerTest {
- private static Logger logger = LoggerFactory.getLogger(LoggerTest.class);
- @Test
- public void testLogger(){
- logger.debug("debug:....");
- logger.info("info...");
- logger.error("error...");
- }
- }
在这里 ,我们需要在每个类中 创建一个 Logger对象,并且使用 当前类的类名来创建,那么 这个类名存在的意义在哪里?我们可以先运行 第一个测试,看下结果
因此,使用类名创建的logger 的作用就是在这里,但是如果我们需要在每个类中都这样的创建一个logger对象,不方便,因此可以通过 一个注解来帮我们实现 那就是 @Slf4j ,该注解就可以帮我们自动创建一个 log对象
- @Test
- public void testSl4j(){
- log.debug("sl4j.debug...");
- log.info("sl4j.info");
- log.error("sl4j.error");
- }
这里的日志输出格式 是默认的,我们可以通过的教程 来配置 日志输出配置
3. 日志的配置
- logging:
- pattern:
- console: "%d - %msg%n"
2. 配置日志输出位置 比如磁盘 e盘
- logging:
- pattern:
- console: "%d - %msg%n"
- path: e:/
运行后,我们可以看到 在 e盘下生成了一个文件 spring.log 这文件是spring生成
- logging:
- pattern:
- console: "%d - %msg%n"
- path: e:/
- file: e:/sell.log
我们可以看到 在e盘下生成了以下文件
这里注意:我们可以配置日志保存位置,以及具体输出的文件,如果同时配置的话,会使用我们指定的file为主,可以测
- logging:
- pattern:
- console: "%d - %msg%n"
- #path: e:/
- file: e:/sell.log
- level:
- #这里可以是包名也可以是类名
- com.lonely: debug
运行后,我们可以看到 原来只能看到 info 和 error 的,现在的debug也可以看到
- <?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 level="info">
- <appender-ref ref="consoleLog" />
- </root>
- </configuration>
在上面的 logback-spring.xml中,appender配置了一个规则, ConsoleAppender表明日志输出到控制台,layout表明输出格式,root节点配置表明该项目基础的日志级别为info,引入 控制台输出的规则,那么我们运行看结果
- <?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>
- <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <encoder>
- <pattern>%d -- %msg%n</pattern>
- </encoder>
- <!--滚动策略-->
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <!--路径-->
- <fileNamePattern>e:/info-%d.log</fileNamePattern>
- </rollingPolicy>
- </appender>
- <root level="info">
- <appender-ref ref="consoleLog" />
- <appender-ref ref="fileInfoLog"/>
- </root>
- </configuration>
3. 如果我们想 把 info 的日志 和 error的日志区分到两个文件放置,该怎么写呢?
- <?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>
- <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <encoder>
- <pattern>%d -- %msg%n</pattern>
- </encoder>
- <!--滚动策略-->
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <!--路径-->
- <fileNamePattern>e:/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>%d -- %msg%n</pattern>
- </encoder>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>e:/error-%d.log</fileNamePattern>
- </rollingPolicy>
- </appender>
- <root level="info">
- <appender-ref ref="consoleLog" />
- <appender-ref ref="fileInfoLog"/>
- <appender-ref ref="fileErrorLog"/>
- </root>
- </configuration>
运行后,我们可以在 e盘下的 error.log中看到 里面只有一条记录,关于error的记录,但是我们在info的那个文件中,依旧有info和error的信息,那么如果将info提取出来呢? 能不能也想这样添加一个过滤器呢,测试一下,经过测试我们发现没有作用,因为拦截info,error还是会显示,因为error的优先级高,那么我们可以利用如下方法来处理,demo如下:
- <?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>
- <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>%d -- %msg%n</pattern>
- </encoder>
- <!--滚动策略-->
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <!--路径-->
- <fileNamePattern>e:/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>%d -- %msg%n</pattern>
- </encoder>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>e:/error-%d.log</fileNamePattern>
- </rollingPolicy>
- </appender>
- <root level="info">
- <appender-ref ref="consoleLog" />
- <appender-ref ref="fileInfoLog"/>
- <appender-ref ref="fileErrorLog"/>
- </root>
- </configuration>
运行后,发现确实实现了 info 和 error的日志分开,但是 在上图例子中,虽然我们排除了 error,但是除开info,如果我们还有 warn级别的日志信息,还是会输出在 info.log文件中,因为warn优先级比info高,但是我们只是拦截了error而已。
日志:slf4j+logback 的配置与使用的更多相关文章
- (八)slf4j+logback 的配置与使用
logback的配置看这篇:https://www.cnblogs.com/lvchengda/p/13054457.html 使用 @Slf4j 1)安装插件lombok 在eclipse/myec ...
- 关于日志slf4j+logback&logback.xml配置
1.maven依赖 <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <!-- <dependen ...
- slf4j/logback: logging日志的配置
slf4j/logback: logging日志的配置 import依赖: import org.slf4j.Logger;import org.slf4j.LoggerFactory;private ...
- 【Java】日志知识总结和经常使用组合配置(commons-logging,log4j,slf4j,logback)
Log4j Apache的一个开放源码项目,通过使用Log4j,我们能够控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等.用 ...
- 在android中使用logback-android日志框架配置 slf4j + logback
为什么使用 slf4j + logback logbak定位于log4j的替代者,logback同样支持slf4j,方便被替换.在Android平台上,我在使用log4中遇到tag混乱的问题.相比lo ...
- lombok+slf4j+logback SLF4J和Logback日志框架详解
maven 包依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lomb ...
- 日志组件logback的介绍及配置使用方法
一.logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和logback-acc ...
- Java日志框架 (commons-logging,log4j,slf4j,logback)
转自:http://blog.csdn.net/kobejayandy/article/details/17335407 如果对于commons-loging.log4j.slf4j.LogBack等 ...
- 使用logback.xml配置来实现日志文件输出
转自:http://sungang-1120.iteye.com/blog/2104296 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback- ...
随机推荐
- python 装饰器 (test = submit(test))
两层的装饰器,这里对于register不需要进行输入 usename, passwd = 'alex', 'abc123' def register(func): def wrapper(*args, ...
- 使用oracle的存储过程的例子
十几年没有用oracle的存储过程了,有些东西已经忘了,没有想到今天又要用.在这里写个例子.它演示了存储过程的格式,游标的使用,循环.判断的使用,还有直接执行一个拼接的SQL的用法.以下是代码: cr ...
- Python:目录
ylbtech-Python:目录 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtec ...
- 六十七:flask上下文之Local线程隔离对象
Local对象在flask中,类似于request对象,其实是绑定到了werkzeug.local.Local对象上,这样即使是同一个对象,在多线程中都是隔离的,类似的对象还有session以及g对象 ...
- 数据库字段和实体类和map中对应类型
http://blog.csdn.net/sxe18652071425/article/details/46416217 地址 MySQL数据类型 JAVA数据类型 JDBC TYPE 普通变量类型 ...
- (转)java8实现对象列表去重
java8实现列表去重,java8的stream和lambda的使用实例 通过普通的方式也可以达到去重的效果,但是借助java8新特性可以很方便的实现列表去重,测试demo如下 实体类: public ...
- 根据json生成java实体类
之前一篇讲过了XML转java实体对象,使用的是JAXB技术,今天给大家推荐一个在线转json到java实体对象: http://www.bejson.com/json2javapojo/new/ 转 ...
- linux系统中vi点击上下左右键后出现ABCD,没有移动光标
终端(terminal)中输入 vi /etc /vim/vimrc.tiny 在打开的文件中修改 1. 将 set compatible 修改为 set nocompatible 在下一行加入 ...
- PHP $_SERVER超全局变量
$_SERVER是php中的超全局变量,一个包含了诸如头信息(header).路径(path).以及脚本位置(script locations)等等信息的数组.这个数组中的项目由 Web 服务器创建. ...
- HTTP 请求中的 Form Data 与 Request Payload 的区别
HTTP 请求中的 Form Data 与 Request Payload 的区别 前端开发中经常会用到 AJAX 发送异步请求,对于 POST 类型的请求会附带请求数据.而常用的两种传参方式为:Fo ...