Logback 基础知识
1.Logback使用
logback 是log4j的替代者,其需要slf4j。
其配置文件主要有以下三种
1. logback.groovy
2. logback-test.xml
3. logback.xml
在加载配置文件的过程汇总,会按照1.2.3的顺序去加载,首先找的groovy文件。
所以如果启动的时候打印了info日志会看到:
11:06:45,631 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
11:06:45,631 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
11:06:45,631 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/D:/ideaspace/untitled/ran-frontend/target/classes/logback.xml]
可以看出来,首先去classpath下找前两个文件,如果找不到的化,再去找第三个。
其使用没有什么区别:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter; public class HelloWorld2 { public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld2");
logger.debug("Hello world."); // print internal state, 我们可以监控到其内部的状态
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);
}
}
日志的自动加载
<!-- 表示的启动自动扫描, 其中时间单位默认是milliseconds ,默认时间是60秒-->
<configuration scan="true" scanPeriod="30 seconds" >
...
</configuration>
如果scan配置的是true,则会启用ReconfigureOnChangeFilter,此Filter会在任何调用日志记录(任何级别)的时候都会被执行。
由于每次都被执行,因此这个会有比较严重的性能问题,
In order to improve performance, ReconfigureOnChangeFilter is in reality "alive" only once every N logging operations.
Depending on how often your application logs, the value of N can be modified on the fly by logback.
By default N is 16, although it can go as high as 2^16 (= 65536) for CPU-intensive applications.
因此如果配置文件修改了,需要生效的话,必要要达到指定的调用次数而且达到重新加载的时间才会生效。
其中这个次数默认是16次,最高可以配置到2^16次。
logback.xml配置:
1. 简单文件配置
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>D:\deploy\logs\ranger.log</file>
<append>true</append>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
2. 简单的控制台配置;
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder >
</appender> <root level="INFO">
<appender-ref ref="stdout" />
</root>
</configuration>
3. 滚动日志配置:
<configuration scan="true" scanPeriod="30 seconds">
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:\deploy\logs\ranger.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>ranger.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder >
</appender>
<root level="INFO">
<appender-ref ref="file" />
</root>
</configuration>
4. 控制台和文件同时记录
<configuration scan="true" scanPeriod="30 seconds">
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:\deploy\logs\ranger.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>ranger.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder >
</appender>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder >
</appender>
<root level="INFO">
<appender-ref ref="file" />
<appender-ref ref="stdout" />
</root>
</configuration>
5. 为某个类或者包单独设置日志级别
<configuration scan="true" scanPeriod="30 seconds">
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:\deploy\logs\ranger.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>ranger.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder >
</appender>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread] %logger{35} - %msg%n</pattern>
</encoder >
</appender>
<!-- 默认日志级别是Error -->
<root level="ERROR">
<appender-ref ref="file" />
<appender-ref ref="stdout" />
</root>
<!-- 单独的日志级别设置 HibernateLogInterceptor的日志级别是DEBUG-->
<logger name="com.ranger.utils.orm.HibernateLogInterceptor" additivity="false">
<level value="DEBUG" />
<appender-ref ref="file" />
</logger>
</configuration>
Logback 基础知识的更多相关文章
- 守护线程在logback中的使用 - 论基础知识的重要性
守护线程在logback中的使用 先说问题,在java应用中,logback的异步Appender是怎么在主线程结束后,停下来的? 复盘 我在一个logback的测试用例中,写了这样的代码和logba ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- selenium自动化基础知识
什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(三) - 聚合和排序
SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...
- [SQL] SQL 基础知识梳理(四) - 数据更新
SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...
随机推荐
- Plotting trees from Random Forest models with ggraph
Today, I want to show how I use Thomas Lin Pederson's awesome ggraph package to plot decision trees ...
- kafka 0.10.2 部署失败后,重新部署
删除kafka各个节点log目录 删除zookeeper上kafka相关的目录 [root@m1 ~]# zkCli.sh Connecting to localhost: -- ::, [myid: ...
- 目前微信 微博 新浪 豆瓣等所有分享的js插件
原理 功能 集成微信.微博.开心.豆瓣.人人.qq微博.搜狐.qq空间等分享 即时分享: 默认加载插件,即启动全部分享 定制分享:通过参数配置.静态数据配置 由你决定何时分享,如何分享 扩展: 通过数 ...
- 移动端H5通用表单验证插件
将表单验证的通用部分提炼出来,做成一个简易插件,方便调用. 已将源码放到GitHub上,名字叫zValidate. 手机可扫描下图查看示例,PC端可点击此处查看: 一.原理 1)需要引入zepto.j ...
- 新写的高仿Arcmap,要的拿去玩玩
本想着对所学的ArcGIS Engine开发作一个了结,于是乎写了这么一个仿照Arcmap的程序.我所见过的地理信息系统中,ArcGIS是功能最完善.二次开发最易上手的平台了(当然别提AutoCAD那 ...
- Java中设计模式之单例设计模式-1
单例作用 1 节省内存 2 可以避免多种状态导致状态冲突 单例的创建步骤 1 私有化构造方法 2 私有化声明的属性 3 getInstance 4 方法需要静态 单例分类 1.懒汉式 2.饿汉式 两种 ...
- C语言到C++(1) - 基本变化
说到C++和C语言的区别,大部分人都会想到面向对象和面向过程.然而这种说法并不准确.面向对象和面向过程指的是两种不同的程序设计思想,而C++与C是两种编程语言,难道C++就不能用于面向过程去解决问题吗 ...
- python爬虫 模拟登陆校园网-初级
最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登 ...
- 备份Rhythmbox播放器的曲目和播放列表信息
Rhythmbox音乐播放器只能保存单个播放列表,如果在rhythmbox下建了很多播放列表(比如按歌手名分类),每个播放列表下包含一些歌曲,为了避免重装系统后重新建这些播放列表,可以备份下面的文件. ...
- android studio IDE 下,设置ACTIVITY全屏
因为ANDROID STUDIO的JAVA类是继承AppCompatActivity的 ,所以常规的全屏设置并不管用.如果要设置全屏,请参照如下代码/ 1/首先,打开AndroidManifest.x ...