日志管理,springboot

1.市面上的日志框架;
JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....

2.

日志门面: SLF4J;
日志实现:Logback;
SpringBoot:底层是Spring框架,Spring框架默认是用JCL;‘
SpringBoot选用 SLF4j和logback;

3.SLF4j使用
3.1如何在系统中使用SLF4j   https://www.slf4j.org
以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;
给系统里面导入slf4j的jar和 logback的实现jar

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

public class HelloWorld {
    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(HelloWorld.class);
        logger.info("Hello World");
    }
}    

理想使用情况:

3.2但是,当使用框架时,各框架有自己使用的日志框架,因此需要下述处理方式:

如何让系统中所有的日志都统一到slf4j;
a、将系统中其他日志框架先排除出去;
b、用中间包来替换原有的日志框架;
c、我们导入slf4j其他的实现

案例1:slf4j+logback

案例二:slf4j+log4j

4.SpringBoot使用它来做日志功能

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐logging</artifactId>
</dependency>

4.1底层依赖关系

4.2总结:
1)、SpringBoot底层也是使用slf4j+logback的方式进行日志记录
2)、SpringBoot也把其他的日志都替换成了slf4j;
3)、中间替换包?

@SuppressWarnings("rawtypes")
public abstract class LogFactory {
    static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J =
    "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";
    static LogFactory logFactory = new SLF4JLogFactory();

}

4)、如果我们要引入其他框架?一定要把这个框架的默认日志依赖移除掉?
以排除Spring默认日志框架为例,Spring框架用的是commons-logging;

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring‐core</artifactId>
    <exclusions>
        <exclusion>
            <groupId>commons‐logging</groupId>
            <artifactId>commons‐logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可

5.使用日志

package com.zy.log;

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorldLog {

    // 记录器
    Logger logger = LoggerFactory.getLogger(getClass());

    @Test
    public void fn(){
        //日志的级别;
        //由低到高 trace<debug<info<warn<error
        //可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效
        logger.trace("这是trace日志...");
        logger.debug("这是debug日志...");
        //SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别
        logger.info("这是info日志...");
        logger.warn("这是warn日志...");
        logger.error("这是error日志...");
    }
}
日志输出格式:
	%d表示日期时间,
	%thread表示线程名,
	%‐5level:级别从左显示5个字符宽度
	%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
	%msg:日志消息,
	%n是换行符
	%d{yyyy‐MM‐dd HH:mm:ss.SSS} [%thread] %‐5level %logger{50} ‐ %msg%n

 SpringBoot修改日志的默认配置(application.properties)

logging.level.com.zy=trace

# 不指定路径在当前项目下生成springboot.log日志
#logging.path=

# 可以指定完整的路径;
#logging.file=F:/springboot.log

# 在当前磁盘的根路径下创建spring文件夹和里面的log文件夹;使用 spring.log 作为默认文件
logging.path=/spring/log

# 在控制台输出的日志的格式
logging.pattern.console=%d{yyyy‐MM‐dd} [%thread] %‐5level %logger{50} ‐ %msg%n

# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy‐MM‐dd} === [%thread] === %‐5level === %logger{50} ==== %msg%n

指定配置:

<springProfile name="staging">
    <!‐‐ configuration to be enabled when the "staging" profile is active ‐‐>
    可以指定某段配置只在某个环境下生效
</springProfile>

例如:

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
    <!‐‐
        日志输出格式:
        %d表示日期时间,
        %thread表示线程名,
        %‐5level:级别从左显示5个字符宽度
        %logger{50} 表示logger名字最长50个字符,否则按照句点分割。
        %msg:日志消息,
        %n是换行符
    ‐‐>
    <layout class="ch.qos.logback.classic.PatternLayout">
        <springProfile name="dev">
            <pattern>
                %d{yyyy‐MM‐dd HH:mm:ss.SSS} ‐‐‐‐> [%thread] ‐‐‐> %‐5level %logger{50} ‐ %msg%n
            </pattern>
        </springProfile>
        <springProfile name="!dev">
            <pattern>
                %d{yyyy‐MM‐dd HH:mm:ss.SSS} ==== [%thread] ==== %‐5level %logger{50} ‐ %msg%n
            </pattern>
        </springProfile>
    </layout>
</appender>

如果使用logback.xml作为日志配置文件,还要使用profile功能,会有以下错误

no applicable action for [springProfile] 

6.切换日志框架 方法
6.1可以按照slf4j的日志适配图,进行相关的切换;
slf4j+log4j的方式;

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐web</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>logback‐classic</artifactId>
            <groupId>ch.qos.logback</groupId>
        </exclusion>
        <exclusion>
            <artifactId>log4j‐over‐slf4j</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j‐log4j12</artifactId>
</dependency>

6.2切换为log4j2

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐web</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>spring‐boot‐starter‐logging</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐log4j2</artifactId>
</dependency>

原文地址:https://www.cnblogs.com/psy-code/p/9521031.html

时间: 2024-07-30 23:03:20

日志管理,springboot的相关文章

SpringBoot | 第二十三章:日志管理之整合篇

前言 在本系列<第四章:日志管理>中,由于工作中日志这块都是走默认配置,也没有深入了解过,因为部署过程中直接使用了linux中的输出重定向功能,如java -jar xx.jar > app.log 2>&1 &,直接输出到某个日志文件了.所以也就没有认真关心过默认的日志格式了.系列文章出来后,也看见有网友反馈说如何进行日志的相关配置,或者配置失效问题.本着负责的原则,本文就来详细介绍下SpringBoot中日志管理相关配置问题.也是最近熟悉了下,有不足之处,还望指

Springboot中的日志管理

本案例中可以了解,怎么配置日志的输出路径,输出格式(比如说zip格式),按日期进行划分(今天的日志输出为一个文件,明天的日志输出到另一个文件),在按日期划分的同时又按文件大小划分(比如说每天的日志记录很多,希望一个日志文件为5GB...),上面的功能,看完这篇都能实现.(参考链接超有用,建议直接下拉打开链接) Slf4j 日志管理的抽象接口 Log4j,log4j2,logback,日志管理框架,日志管理实现 Springboot中pom.xml,若引入了web的起步依赖,不需要再引入日志管理相

Springboot 日志管理配置logback-spring.xml

几种常见的日志 Log4j:是最早的日志框架,是apach旗下的,可以单独使用,也可配合日志框架JCL使用: Log4j2:apach旗下的关于log4j的升级版: Logback:是基于slf4j接口实现的一套日志框架组件:(Logback是由log4j创始人设计的又一个开源日志组件.) JUL(java utillog):仿log4j实现的日志框架,是sun旗下的,(也就是在我们普遍使用的jdk中): Commons loggin:是一套日志接口(apache): Slf4j:也是一套日志接

springboot日志管理+集成log4j

sprongboot使用的默认日志框架是Logback. 可以在application.properties配置简单日志属性,也可以单独配置logback.xml格式,还可以使用log4j来管理. 下面分别介绍自带的日志配置以及如何使用log4j来作为日志管理. 1 .自带日志管理配置: 1.1 修改application.properties #配置日志 logging.level.root=INFO logging.level.org.springframework.web=DEBUG lo

SpringBoot全局日志管理(AOP)

1.在pom.xml中引入aop的jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 2.创建WebLogAspect类 package com.cppdy.log; import java.util.Enumeration; import

Spring Boot AOP 简易操作日志管理

AOP (Aspect Oriented Programming) 面向切面编程. 业务有核心业务和边缘业务. 比如用户管理,菜单管理,权限管理,这些都属于核心业务. 比如日志管理,操作记录管理,这些都是边缘业务,可以统一的提出来. 尝试使用SpringBoot +AOP 提出操作记录业务. github aop_demo package com.lick.aspect.lang.annotation; import com.lick.aspect.lang.enums.BusinessType

Spring Boot 日志管理

Spring Boot 日志管理 网址 Spring Boot 日志管理 http://blog.didispace.com/springbootlog/ Spring Boot快速入门(四)--日志系统 https://leibnizhu.gitlab.io/2016/11/26/Spring-Boot%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8%EF%BC%88%E5%9B%9B%EF%BC%89%E2%80%94%E2%80%94%E6%97%A5%E5%BF%

「SpringBoot」如何优雅地管理SpringBoot项目

本文主要讲述一下如何优雅地管理SpringBoot项目. 背景 课堂上,当小明形如流水地回答完沐芳老师提出来的问题时,却被至今没有对象的胖虎无情嘲讽了? 沐芳老师:小明,你平时是如何启动.停止你的SpringBoot项目的? 小明(自信满满):启动时使用java -jar xxxx.jar命令启动,停止服务时,使用ps -ef找到服务的pid,然后再kill掉停止. 胖虎:就这? 这让小明很有挫败感,原计划按时放学回去陪隔壁小花打王者荣耀的小明,毅然决然留在教室潜心研究一番到底什么是Spring

slf4j+logback搭建超实用的日志管理模块

文章转自http://www.2cto.com/kf/201702/536097.html slf4j+logback搭建超实用的日志管理模块(对日志有编号管理):日志功能在服务器端再常见不过了,我们非常有必要记录下发生在服务器上的活动,这些日志将用于debug.统计等各种用途. slf4j+logback这种实现方式是很常见的,好处自然是方便!.在这篇文章中,你将看到如何使用logback搭建你自己的日志组件并将日志输出到文件.如何查看这些文件.如何为每个线程上的访问分配独有的一个日志id.