【Log】logback的配置和使用(一)
logback介绍
Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能
想要学习logback,可以参照Logback用户手册中文版.pdf。
logback使用
- 先新建一个maven工程

- logback需要引入的jar包(slf4j-api-x.x.x.jar,logback-core-x.x.x.jar,logback-classic-1.0.0.jar,logback-access-x.x.x.jar),maven的依赖关系如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>test-logback</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>test Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
<type>jar</type>
<scope>compile</scope>
</dependency> <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>0.9.30</version>
<type>jar</type>
</dependency> <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>0.9.30</version>
<type>jar</type>
</dependency> <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>0.9.30</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>test</finalName>
</build>
</project>
pom.xml
- 测试类
package com.test; import java.util.Date; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class Test { final static Logger logger = LoggerFactory.getLogger(Test.class ); public static void main(String[] args) throws InterruptedException { logger.debug( "现在的时间是 {}" , new Date().toString()); logger.info( " This time is {}" , new Date().toString()); logger.warn( " This time is {}" , new Date().toString()); logger.error( " This time is {}" , new Date().toString()); } }
Test.java
- Logback 可以通过编程式配置,或用 XML 格式的配置文件进行配置。
Logback 采取下面的步骤进行自我配置:
1. 尝试在 classpath 下查找文件 logback-test.xml;
2. 如果文件不存在,则查找文件 logback.xml;
3. 如果两个文件都不存在,logback 用 BasicConfigurator 自动对自己进行配置,这会 导致记录输出到控制台。
如果是maven工程直接把logback.xml放在src/main/resources里面即可。
<?xml version="1.0" encoding="UTF-8" ?> <!-- scan="true" 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
<!-- scanPeriod="30 seconds" 设置每30秒自动扫描,若没有指定具体单位则以milliseconds为标准(单位:milliseconds, seconds, minutes or hours) -->
<!-- debug="false"当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。-->
<configuration scan="true" scanPeriod="30 seconds">
<!-- 上下文名称 -->
<contextName>test</contextName> <!-- 存放日志文件路径 -->
<property name="Log_Home" value="D:/logs/test" /> <!-- INFO级别 -->
<appender name="FILE_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>
<Encoding>UTF-8</Encoding>
<File>${Log_Home}/info/info.log</File>
<!-- 根据时间来制定滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>
${Log_Home}/info/info.%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!-- 多久后自动清楚旧的日志文件,单位:月 -->
<MaxHistory>1</MaxHistory>
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 默认值是 10MB,文档最大值 -->
<MaxFileSize>2MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy> <encoder>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
</encoder>
</appender> <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender> <!-- 控制java下面包的打印,没设置等级,将继承上级root的等级 -->
<logger name="com.test"/> <!-- 当前日志总级别为TRACE、DEBUG、INFO、 WARN、ERROR、ALL和 OF -->
<!-- the level of the root level is set to DEBUG by default. -->
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE_INFO" />
</root>
</configuration>
logback.xml
- 运行测试类Test.java的main方法,控制台输出如下
20:35:23,708 |-INFO in ch.qos.logback.classic.LoggerContext[test] - Could NOT find resource [logback.groovy]
20:35:23,709 |-INFO in ch.qos.logback.classic.LoggerContext[test] - Could NOT find resource [logback-test.xml]
20:35:23,709 |-INFO in ch.qos.logback.classic.LoggerContext[test] - Found resource [logback.xml] at [file:/D:/workspace/test-logback/target/classes/logback.xml]
20:35:23,751 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
20:35:23,753 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeFilter scanning period to 30 seconds
20:35:23,753 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[D:\workspace\test-logback\target\classes\logback.xml]] every 30 seconds.
20:35:23,753 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter
20:35:23,759 |-INFO in ch.qos.logback.classic.joran.action.ContextNameAction - Setting logger context name as [test]
20:35:23,760 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
20:35:23,763 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [FILE_INFO]
20:35:23,783 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@25:13 - no applicable action for [Encoding], current pattern is [[configuration][appender][Encoding]]
20:35:23,819 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - No compression will be used
20:35:23,820 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern D:/logs/test/info/info.%d{yyyy-MM-dd}.%i.log for the active file
20:35:23,822 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5599682f - The date pattern is 'yyyy-MM-dd' from file name pattern 'D:/logs/test/info/info.%d{yyyy-MM-dd}.%i.log'.
20:35:23,822 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5599682f - Roll-over at midnight.
20:35:23,824 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5599682f - Setting initial period to Wed Jul 13 20:05:58 CST 2016
20:35:23,825 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
20:35:23,837 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE_INFO] - Active log file name: D:/logs/test/info/info.log
20:35:23,837 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE_INFO] - File property is set to [D:/logs/test/info/info.log]
20:35:23,838 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
20:35:23,839 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
20:35:23,840 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
20:35:23,841 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
20:35:23,841 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
20:35:23,841 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [FILE_INFO] to Logger[ROOT]
20:35:23,842 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@4a871190 - Registering current configuration as safe fallback point 2016-07-13 20:35:23 [main] DEBUG com.test.Test - 现在的时间是 Wed Jul 13 20:35:23 CST 2016
2016-07-13 20:35:23 [main] INFO com.test.Test - This time is Wed Jul 13 20:35:23 CST 2016
2016-07-13 20:35:23 [main] WARN com.test.Test - This time is Wed Jul 13 20:35:23 CST 2016
2016-07-13 20:35:23 [main] ERROR com.test.Test - This time is Wed Jul 13 20:35:23 CST 2016
console.txt
外部输出的日志文件如下:

info.log的内容:

【Log】logback的配置和使用(一)的更多相关文章
- SpringBoot使用logback自定义配置时遇到的坑 --- 在 /tmp目录下自动生成spring.log文件
问题描述 SpringBoot项目使用logback自定义配置后,会在/tmp/ 目录下生成 spring.log的文件(如下图所示). 解决方案 通过各种资料的搜索,最终发现问题的所在(logbac ...
- logback 常用配置详解<appender>
logback 常用配置详解 <appender> <appender>: <appender>是<configuration>的子节点,是负责写日志的 ...
- 【转】logback 常用配置详解(序)logback 简介
原创文章,转载请指明出处:http://aub.iteye.com/blog/1101222, 尊重他人即尊重自己 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透 ...
- logback 常用配置详解(二) <appender>
logback 常用配置详解(二) <appender> <appender>: <appender>是<configuration>的子节点,是负责写 ...
- spring 3.2.x + struts2 + mybatis 3.x + logback 整合配置
与前面的一篇mybatis 3.2.7 与 spring mvc 3.x.logback整合 相比,只是web层的MVC前端框架,从spring mvc转换成struts 2.x系列,变化并不大 一. ...
- 使用logback.xml配置来实现日志文件输出
转自:http://sungang-1120.iteye.com/blog/2104296 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback- ...
- Logback日志配置的简单使用
Logback介绍 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和logback-access ...
- logback使用配置详解
title: logback使用配置详解 date: 2017-04-25 16:42:49 tags: 日志 --- 1.介绍 Logback是由log4j创始人设计的另一个开源日志组件,它当前分为 ...
- logback常用配置详解及logback简介
logback 简介(一) Ceki Gülcü在Java日志领域世界知名.他创造了Log4J ,这个最早的Java日志框架即便在JRE内置日志功能的竞争下仍然非常流行.随后他又着手实现SLF4J 这 ...
- logback日志配置
第一步:加入jar包.要加入slf4j和logback的jar包,slf4j需要的jar包为slf4j-api,logback需要2个jar包(logback-classic.logback-core ...
随机推荐
- 关于BeautifulSoup类中的tag对象的string和text属性
<dl> <dt> 今开 </dt><dd class="s-down">3.87</dd> </dl> & ...
- leetcode242
public class Solution { public bool IsAnagram(string s, string t) { Dictionary<char, int> dic ...
- air 桌面应用发布后可以删除的文件
****\Adobe AIR\Versions\1.0 下的文件夹Resources,可以整个删除 ***META-INF\AIR目录下的application.xml配置文件可修改initialWi ...
- 5 Python3 函数进阶&迭代器与生成器
1.函数进阶 1.1.名称空间 又名name space, 顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的 ...
- H5 缓存机制解析
在web项目开发中,我们可能都曾碰到过这样一个棘手的问题: 线上项目需要更新一个有问题的资源(可能是图片,js,css,json数据等),这个资源已经发布了很长一段时间,为什么页面在浏览器里打开还是没 ...
- tensorflow笔记之softmax_cross_enropy
tf.nn.sparse_softmax_cross_entropy_with_logits() 当正确结果只有一个时,可以加速计算,比如MNIST数字识别,每张图片中仅包含一个数字,所以可以使用这个 ...
- ansible进阶小技巧--tags
用ansible写playbook的朋友可能会发现,当配置工作很多时,如果在中间过程出错了,修改后想重新执行,前面的一大堆步骤让人感觉很烦躁.虽然提供了“retry”文件,但是却只是根据host来判断 ...
- Object-c 创建按钮
@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //动态创建我们自己的按钮 //1.创建按钮(UIB ...
- nginx的配置文件解析
worker_processes ;#工作进程的个数,一般与计算机的cpu核数一致 events { worker_connections ;#单个进程最大连接数(最大连接数=连接数*进程数) } h ...
- @Transactionl注解
spring 事务注解 默认遇到throw new RuntimeException("...");会回滚 需要捕获的throw new Exception("...&q ...