日志: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- ...
随机推荐
- mongodb 操作笔记
切换库:use 库名 显示所有的数据库:show dbs 创建集合:db.createCollection("collection_name",{capped:true,size: ...
- ubuntu下如何卸载nvidia显卡驱动?
答: sudo apt-get remove nvidia* -y
- AutoResetEvent和ManualResetEvent(多线程操作)
摘自风中灵药的博客:https://www.cnblogs.com/qingyun163/archive/2013/01/05/2846633.html#!comments AutoResetEven ...
- python(29)Tinker+BeautifulSoup+Request抓取美女壁纸
原文链接:http://www.limerence2017.com/2019/10/22/python29/ 抓取准备 今天是10月24日,祝所有程序员节日快乐.今天打算写个爬虫抓取3DMGAME论坛 ...
- idea 中提示:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除
maven的配置文件settings.xml中添加: <profile> <id>jdk-1.8</id> <activation> <activ ...
- flannel下k8s pod及容器无法跨主机互通问题
参照文档 https://blog.csdn.net/a610786189/article/details/80340556 https://blog.csdn.net/weixin_43092 ...
- java:nginx(java代码操作ftp服务器)
1.检查是否安装了vsftpd [root@linux01 ~]# rpm -qa|grep vsftpd 2.安装vsftpd [root@linux01 ~]# yum -y install vs ...
- Java ——注释 命名
注释 1.类在每个类前面必须加上类注释,注释模板如下:/*** Copyright (C), 2006-2010, ChengDu Lovo info. Co., Ltd.* FileName: Te ...
- 利用fiddler+nginx模拟流量识别与转发
最近看到一些关于全链路压测的文章,全链路压测主要处理以下问题: 数据清洗压测流量标记,识别 压测流量标记的传递测试数据与线上数据隔离等等... 要实现全链路压测,必然要对原有的业务系统进行升级,要怎么 ...
- MVC模型简介
MVC模型:是一种架构型的模式,本身不引入新功能,只是帮助我们将开发的结构组织的更加合理,使展示与模型分离.流程控制逻辑.业务逻辑调用与展示逻辑分离. 首先让我们了解下MVC(Model-View-C ...