`

slf4j + logback配置实例

    博客分类:
  • java
 
阅读更多

1. 项目结构

实现 (a) A B C D 类都有对应的独立日志文件 (b) 一个全局的info级别日志文件并保留历史日志 (c) 一个全局的error级别的日志文件并保留历史日志

 

1.1 配置logback.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
	
    <!-- 控制台输出 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
		    <!-- 使用caller, 可以像log4j一样, 在日志中输出带有跳转的链接 -->
			<pattern>
				%date [%thread] %-5level %replace(%caller{1}){'(\bCaller(.+?)at\b)|\r|\n|\s*|\t', ''} - %msg%n
            </pattern>
		</encoder>
	</appender>
	
	<!-- 用于记录所有的error级别的日志  -->
	<appender name="all_error"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<!-- 存放error级别日志的文件. -->
		<file>log/all_error/error.log</file>
		<!-- 
			按照序列生成滚动日志文件 
			 单个日志文件的生命周期 eg: error.log -r(ename)-> error-his-1.log -r-> ... -r-> error-his-5.log -delete-> null   
		-->
		<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
			<fileNamePattern>log/all_error/error-his-%i.log</fileNamePattern>
			<minIndex>1</minIndex>
			<maxIndex>5</maxIndex>
		</rollingPolicy>
		<!-- 触发条件 -->
		<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
			<maxFileSize>1MB</maxFileSize>
		</triggeringPolicy>
		<encoder>
			<pattern>
				%date [%thread] %-5level [%logger:%method:%line] - %msg%n
            </pattern>
		</encoder>
	</appender>
	
	<!-- 用于记录所有的info及以上级别的日志  -->
	<appender name="all_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>INFO</level>
		</filter>
		<file>log/all_info/info.log</file>
		<!-- 按照时间规则生成日志文件 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>log/all_info/info_his_%d{yyyyMMdd_HH/mm}.log
			</fileNamePattern>
			<!-- 保留最多5个历史日志 -->
			<maxHistory>5</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>
				%date [%thread] %-5level [%logger:%method:%line] - %msg%n
            </pattern>
		</encoder>
	</appender>
	
	<appender name="a" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>log/a/a_debug.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
			<FileNamePattern>log/a/a_debug.%i.log</FileNamePattern>
			<MinIndex>1</MinIndex>
			<MaxIndex>5</MaxIndex>
		</rollingPolicy>
		<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
			<MaxFileSize>5MB</MaxFileSize>
		</triggeringPolicy>
		<encoder>
			<pattern>
				%date [%thread] %-5level [%logger:%method:%line] - %msg%n
            </pattern>
		</encoder>
	</appender>
	
	<appender name="b" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>log/b/b_info.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
			<FileNamePattern>log/b/b_info.%i.log</FileNamePattern>
			<MinIndex>1</MinIndex>
			<MaxIndex>5</MaxIndex>
		</rollingPolicy>
		<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
			<MaxFileSize>5MB</MaxFileSize>
		</triggeringPolicy>
		<encoder>
			<pattern>
				%date [%thread] %-5level [%logger:%method:%line] - %msg%n
            </pattern>
		</encoder>
	</appender>
	
	<appender name="c" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>log/c/c_warn.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
			<FileNamePattern>log/c/c_warn.%i.log</FileNamePattern>
			<MinIndex>1</MinIndex>
			<MaxIndex>5</MaxIndex>
		</rollingPolicy>
		<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
			<MaxFileSize>5MB</MaxFileSize>
		</triggeringPolicy>
		<encoder>
			<pattern>
				%date [%thread] %-5level [%logger:%method:%line] - %msg%n
            </pattern>
		</encoder>
	</appender>
	
	<appender name="d" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>log/d/d_error.log</File>
		<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
			<FileNamePattern>log/d/d_error.%i.log</FileNamePattern>
			<MinIndex>1</MinIndex>
			<MaxIndex>5</MaxIndex>
		</rollingPolicy>
		<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
			<MaxFileSize>5MB</MaxFileSize>
		</triggeringPolicy>
		<encoder>
			<pattern>
				%date [%thread] %-5level [%logger:%method:%line] - %msg%n
            </pattern>
		</encoder>
	</appender>
	
	<root level="ALL">
		<appender-ref ref="all_info" level="ALL"></appender-ref>
		<appender-ref ref="all_error"></appender-ref>
		<appender-ref ref="STDOUT"></appender-ref>
	</root>
	
	<!-- 记录logger name为com.homeway.logger.a.* 输出的 debug级别及以上的日志, 并保存到独立的日志文件中  -->
	<logger name="com.homeway.logger.a" level="DEBUG" additivity="false">
	    <appender-ref ref="a"></appender-ref>
	</logger>
	
	<logger name="com.homeway.logger.b" level="INFO">
	    <appender-ref ref="b"></appender-ref>
	</logger>
	
	<logger name="com.homeway.logger.c" level="WARN">
	    <appender-ref ref="c"></appender-ref>
	</logger>
	
	<logger name="com.homeway.logger.d" level="ERROR">
	    <appender-ref ref="d"></appender-ref>
	</logger>
	
</configuration>

 常用模板

<!-- simple caller -->
%date{HH:mm:ss.SSS} %-5level %replace(%caller{1}){'(Caller(.+?)(?=\())|\r|\n|\s*|\t', ''} - %msg%n

<!-- fully caller -->
%date %-5level %replace(%caller{1}){'(\bCaller(.+?)at\b)|\r|\n|\s*|\t', ''} - %msg%n

  

1.2 测试代码

1.2.1 com.homeway.logger.a.A.java (classes B,C,D类似)

package com.homeway.logger.a;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class A {
	
	static final Logger log = LoggerFactory.getLogger(A.class);
	
	public A(){
		log.debug(" A - debug ");
		log.info(" A - info ");
		log.warn(" A - {} ", "warn");
		log.error(" {} - {} ", "A" , "error");
	}
}

 

 

1.2.2 com.homeway.logger.LoggerTest.java

package com.homeway.logger;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.homeway.logger.a.A;
import com.homeway.logger.b.B;
import com.homeway.logger.c.C;
import com.homeway.logger.d.D;

public class LoggerTest {
	
	static final Logger logger = LoggerFactory.getLogger(LoggerTest.class);
	
	public static void log(){
		logger.debug("hello {}", "world");
		A a = new A();
		B b = new B();
		C c = new C();
		D d = new D();
		logger.warn("logged classes: {}, {}, {}, {}", 
				a.getClass(), b.getClass(), c.getClass(), d.getClass());
	}
	
	public static void main(String[] args) throws Exception {
		
		logger.info("start logger test.");
		
		// 定时任务
		ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);		
		exec.scheduleAtFixedRate(new Runnable() {			
			@Override
			public void run() {
				log();
			}
		}, 0, 1, TimeUnit.MINUTES);
	} 
}

 

 1.3 运行后生成的日志文件目录结构 

 

 

项目代码附件 : Logger.7z 

 

 

  • 大小: 6.3 KB
  • 大小: 4 KB
分享到:
评论

相关推荐

    采用slf4j+logback输出日志

    本文将详细介绍如何使用SLF4J与Logback来输出应用程序的日志,并提供必要的配置和依赖知识。 1. **SLF4J介绍** SLF4J提供了一种统一的日志接口,使得开发者可以在不改变代码的情况下切换不同的日志实现,如Log4j、...

    slf4j+logback+springmvc+maven小例子

    在Spring MVC应用中,你可以通过SLF4J的LoggerFactory获取Logger实例,并在控制器、服务、DAO等各个层记录日志。例如: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Test...

    Slf4j+logback实现logback测试

    3. **使用Slf4j API**: 在Java代码中,通过import slf4j的LoggerFactory来获取Logger实例,然后调用其各种方法记录日志。例如: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public ...

    slf4j+logback 日志系统使用

    Spring Boot默认集成了SLF4J和Logback,并提供了自动配置,只需在`application.properties`或`application.yml`中调整日志配置即可。 通过上述内容,我们可以了解到SLF4J和Logback日志系统的使用方法以及其主要特点...

    slf4j-1.6.1+logback-0.9.24

    在代码中,你可以使用SLF4J的LoggerFactory获取Logger实例,然后通过调用各种级别的方法(如`debug()`, `info()`, `warn()`, `error()`等)来记录日志。 ```java import org.slf4j.Logger; import org.slf4j....

    Using slf4j with logback

    接下来,我们来看看如何配置Logback作为SLF4J的日志实现。Logback的核心组件包括`ch.qos.logback.classic.LoggerContext`,它是日志配置的上下文,以及`ch.qos.logback.classic.Logger`,它是实际的日志器类。在`src...

    slf4j-1.7.25jar包+logback-1.2.3jar包

    SLF4J(Simple Logging Facade for Java)和Logback是Java日志处理中的两个重要组件,它们在软件开发中广泛用于记录应用程序的运行时信息。SLF4J作为一个日志门面,提供了一种标准的接口,允许开发者在运行时插入...

    slf4j+log4j

    SLF4J(Simple Logging Facade for Java)是一个日志门面,它为各种日志框架提供一个统一的接口,如Logback、Log4j、Java Util Logging等。它的主要目标是使日志库与应用程序解耦,让开发者能够在不修改代码的情况...

    SLF4JTest:这是一个示例程序,可通过SLF4J + Logback输出日志。

    1. **SLF4J API**:项目中的Java代码将使用SLF4J的API来记录日志,如`LoggerFactory.getLogger()`方法获取logger实例,然后调用`info()`, `debug()`, `error()`等方法记录不同级别的日志。 2. **Logback配置**:...

    SLF4J+Log4J

    SLF4J提供了一个抽象层,允许开发者在部署时插入所需的日志实现,比如Log4j、Logback等。这样做的好处是提高了代码的可移植性和灵活性,因为不同的项目可能有不同的日志需求或偏好。 SLF4J的核心组件是`slf4j-api-1...

    slf4j+log4j所需jar包(三个1.6版本)

    SLF4J提供了一个接口层,允许开发者在不改变代码的情况下切换不同的日志实现,比如Logback或Log4j。Log4j则是Apache组织的一个经典日志记录工具,提供了丰富的日志级别、灵活的日志配置以及多种输出格式。 在这个...

    Slf4j+log4j2.docx

    SLF4J(Simple Logging Facade for Java)是Java的日志抽象层,它提供了一种标准的接口,允许用户在不修改代码的情况下更换不同的日志框架,如Log4j、Logback等。Log4j2是Log4j的升级版,提供了更优秀的性能和更多的...

    logbackーslf4j-配置文件实例 难得

    **Logback-SLF4J配置文件详解** 在Java开发中,日志管理是不可或缺的一部分,Logback和SLF4J(Simple Logging Facade for Java)是广泛使用的日志框架。SLF4J提供了一个接口层,允许开发者选择任何底层的日志实现,...

    slf4j输入日志到mongodb

    4. 配置SLF4J:在应用的配置文件中,比如`logback.xml`或`logging.properties`,指定我们的自定义日志处理器为SLF4J的日志实现。 在“mongodbdemo”这个项目中,可能包含了实现这一功能的示例代码。通过分析这些...

    Spring Boot SLF4J日志实例 / Logback

    这个实例将围绕Spring Boot如何集成SLF4J(Simple Logging Facade for Java)和Logback进行详细讲解。 SLF4J是一个日志门面,提供了一种标准的日志API,允许我们在部署时选择不同的日志实现。Logback是SLF4J的一个...

    日志框架统一输出控制(slf4j+log4j)

    它的主要目标是为各种日志框架(如Logback、Log4j等)提供一个统一的接口,使得在项目中切换日志框架变得简单。SLF4J的核心概念包括Logger、Level和Marker,它们分别用于定义日志记录器、控制日志级别和标记特定的...

    slf4j+log4jDemoForJavaProject

    SLF4J是一个日志门面接口,它为各种日志框架提供了统一的编程接口,如Logback、Log4j等。Log4j则是一个具体的日志实现,它提供了丰富的日志功能和高性能的特性。下面我们将详细讨论这两个组件以及如何在Java项目中...

    slf4j1.7.25+ log4j2.8.2 集成jar包

    在代码中,你可以使用SLF4J的LoggerFactory获取一个Logger实例,然后通过这个实例进行日志记录。SLF4J的API提供了各种方法,如`info()`, `debug()`, `warn()` 和 `error()`,对应不同级别的日志输出。 7. **总结**...

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码

    本文将详细探讨如何通过SLF4J接口来使用Log4j进行日志记录,并展示一个测试代码实例。 **SLF4J简介** SLF4J是一个抽象层,为各种日志框架提供了统一的API,如Logback、Log4j等。它的主要优点在于可以让你在不修改...

Global site tag (gtag.js) - Google Analytics