网站换服务器怎么做备份,网站设计网络推广关键词,wordpress用什么语言包,中国和城乡建设部网站首页目录
1.概述
2.切换日志实现
3.使用
3.1.日志级别
3.3.日志离线
3.4.详细定制 1.概述
由一些历史原因#xff0c;JAVA领域存在有很多日志框架#xff0c;如Log4j、Logback、log4j2。
log4j是Java日志框架的元老#xff0c;在log4j被Apache Foundation收入门下之后JAVA领域存在有很多日志框架如Log4j、Logback、log4j2。
log4j是Java日志框架的元老在log4j被Apache Foundation收入门下之后由于理念不合log4j的作者Ceki离开并开发了slf4j和logback。这几个框架都很热门这就造成了不同系统、不同开源框架使用的日志框架都不同。
因为不同日志框架的日志输出格式、API均不同所以当系统中存在多种日志框架被混用就会出现冲突最直接的现象就是——日志格式不统一这对项目的日志排查来说是极不方便的甚至有时候还会因为日志框架的冲突而报错。因此同一个项目中统一日志框架是十分有必要的但是如果只是单纯的保留一个日志框架移除其余日志框架由于各日志系统API的不同很可能系统根本就起不来所以需要一个中间层来进行适配从而解决这个问题。
这个中间层就是——日志门面。日志门面使用门面模式屏蔽掉了不同日志实现之间的不同对外暴露统一的API。 2.切换日志实现
SpringBoot默认使用SLF4J作为日志门面LogBack作为日志实现来记录日志。
这里我们不去细究SLF4J是怎么去完成适配的只需要知道SpringBoot自带了日志门面使用日志门面来输出日志当想要切换日志实现的时候排掉LogBack引入新的实现即可。
以切换为log4j2为例 dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId !--1. 排除掉依赖 ,以此排除掉logbackslf4j引用-- exclusions exclusion groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-logging/artifactId /exclusion /exclusions /dependency !--2. 添加log4j2依赖 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-log4j2/artifactId /dependency 3.使用
3.1.日志级别
配置
可以指定全局日志等级也可以以方法为粒度指定日志等级支持*作为通配符 #全局日志等级
logging.level.roottrace
#单都指定日志等级
logging.level.com.eryi.controller.MyRunner.*trace 代码
package com.eryi.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;Component
public class MyRunner implements CommandLineRunner {//特别注意要使用slf4j的Logger和LoggerFactoryLogger logger LoggerFactory.getLogger(MyRunner.class);Overridepublic void run(String... args) throws Exception {//日志级别errorwarninfodebugtracelogger.trace(trace......);logger.debug(debug......);//Spring Boot默认使用info级别logger.info(info......);logger.warn(warn......);logger.error(error......);}
}
3.3.日志离线 不指定路径日志文件只会在控制台输出不会离线为本地文件。
使用path可以指定路径文件名默认使用springlog.log
使用file可以指定路径文件名不指定路径会默认离现在工程目录下。
file和path是两个冲突设置如果同时配置只有file会生效。 3.4.详细定制
spring boot的配置文件中的日志配置项只能进行粗粒度的配置想对日志进行细粒度的定制需要在类路径下一般是在resources下编写xml配置文件。命名规则为XXX-spring.xmlXXX是日志框架的名称。
以下为一个logback-spring.xml的模板 ?xml version1.0 encodingUTF-8? configuration !-- configuration中有appender、logger、root三个节点 appender表示的是定义了一种文件的输出格式 就有点类似于 变量进行了定义 但是没有来得及使用 logger这个就表示的是我们定义了这个变量在哪一个局部能够使用 我们的日志原本是针对于整个工程的配置 但是你可以定义在哪一个包里面 使用什么日志输出格式 以及 输出到哪些地方 root相当于定义的是整个项目 的日志输出级别 以及 输出日志到哪些地方 -- !-- 定义了日志的输出 ConsoleAppender 这个类表示的是输出到控制台 -- appender namestdout classch.qos.logback.core.ConsoleAppender !--设置输出到控制台的编码和格式 %d{yyyy-MM-dd-HH:mm:ss.SSS}这个表示的是时间的引用 %level当前输出的日志级别 [%thread]表示当前是哪一个线程 %class这个表示的是这个日志是在哪一个类中打印出来的 %line这个表示的是打印这个日志是在这个类的 哪一行打印出来的 %msg这个表示的是打印的消息是什么 %n这个表示的是换行 -- encoder pattern%d{yyyy-MM-dd-HH:mm:ss.SSS}-------%level---------[%thread]-%class:%line-----%msg%n/pattern !--设置了打印到控制台的编码-- charsetUTF-8/charset /encoder /appender !-- 定义日志输出到文件的格式 name是可以随便写的 FileAppender输出到文件 -- appender namefile classch.qos.logback.core.FileAppender !--这个表示的是日志文件输出的路径 这个默认表示的是输出到当前项目的根目录下 叫做file.log-- filelog/file.log/file !--这个表示的是 每一次写日志的时候是在上一次的基础上进行追加-- appendtrue/append encoder !--定义了输出的格式-- pattern%d{yyyy-MM-dd-HH:mm:ss.SSS} %level [%thread]-%class:%line%msg%n/pattern charsetUTF-8/charset /encoder !-- prudenttrue表示的是日志的写入是线程安全的、但是线程安全会降低效率 一般默认设置为false -- prudentfalse/prudent /appender !-- RollingFileAppender表示的是日志要滚动输出 -- appender nametimeFile classch.qos.logback.core.rolling.RollingFileAppender !-- rollingPolicy滚动的策略 TimeBasedRollingPolicy最常用的一个、根据时间进行滚动 当达到一定的时间的时候、就会自动开辟一个新的日志文件 FixedWindowRollingPolicy根据固定窗口的算法重命名文件的滚动策略 TriggeringPolicy根据当前活动文件的大小来来确定是否滚动 -- rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy !--日志文件的名字 引用了当前的日期-- fileNamePatternlog/logFile%d{yyyy-MM-dd}.log/fileNamePattern !--生成这个日志文件 保留多少天-- maxHistory30/maxHistory /rollingPolicy !--编码的格式-- encoder pattern%d{yyyy-MM-dd-HH:mm:ss.SSS} %level [%thread]-%class:%line%msg%n/pattern charsetUTF-8/charset /encoder /appender !-- RollingFileAppender这个是滚动输出 FixedWindowRollingPolicy根据活动窗口算法的大小来滚动输出 -- appender namefixedFile classch.qos.logback.core.rolling.RollingFileAppender !--日志的名字-- filelog/fixedFile.log/file rollingPolicy classch.qos.logback.core.rolling.FixedWindowRollingPolicy fileNamePatternlog/fixedFile%i.log.zip/fileNamePattern !--最少生成一个日志文件-- minIndex1/minIndex !--最多生成3个日志文件-- maxIndex3/maxIndex /rollingPolicy !--根据文件的大小来设置滚动输出的-- triggeringPolicy classch.qos.logback.core.rolling.SizeBasedTriggeringPolicy !--日志文件的最大的大小-- maxFileSize5MB/maxFileSize /triggeringPolicy !--日志输出的格式-- encoder pattern%d{yyyy-MM-dd-HH:mm:ss.SSS} %level [%thread]-%class:%line%msg%n /pattern charsetUTF-8/charset /encoder /appender !--文件输出-- appender namefilter classch.qos.logback.core.FileAppender filelog/filter.log/file appendtrue/append !-- LevelFilter的意思是添加了一个日志级别的过滤器 如果日志的级别等于配置的级别。那么则执行onMatch里面的配置 否则执行 onMismatch中的内容 -- filter classch.qos.logback.classic.filter.LevelFilter levelINFO/level !-- ACCEPT当前的日志会立即被执行不经过其他的过滤器了 DENY日志立即被抛弃、也不再经过其他的过滤器了 NEUTRAL:下一个过滤器将继续执行、如果是最后一个过滤器的话那么就会被执行 -- onMatchACCEPT/onMatch onMismatchDENY/onMismatch /filter !--临界值过滤器如果你输出的日志级别 是低于下面定义的这个级别的话那么 就会被过滤掉-- filter classch.qos.logback.classic.filter.ThresholdFilter levelINFO/level /filter encoder pattern%d{yyyy-MM-dd-HH:mm:ss.SSS} %level [%thread]-%class:%line%msg%n /pattern charsetUTF-8/charset /encoder prudentfalse/prudent /appender !--设置局部的 这个日志的输出级别 或者 是 在哪里输出日志-- !--测试的路径-- !-- logger namecom.project.controller leveltrace addtivityfalse appender-ref refstdout / appender-ref reffile / appender-ref reftimeFile / /logger-- !--这个是给全局设置一个日志级别 所有的都适用 appender-ref 全局的日志我们要打印到哪些地方 -- root levelerror !-- 打印到控制台-- appender-ref refstdout / !-- 打印到file文件里-- appender-ref reffile / appender-ref reftimeFile / !--appender-ref reffixedFile /-- !--appender-ref reffilter /-- /root /configuration