logback怎么自定义指定日志文件存储目录

免费教程   2024年05月11日 1:10  

这篇文章主要介绍“logback怎么自定义指定日志文件存储目录”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“logback怎么自定义指定日志文件存储目录”文章能帮助大家解决问题。

logback自定义指定日志文件存储目录1、正常使用

定义一个logback.xml配置文件即可:

<?xmlversion="1.0"encoding="UTF-8"?><configuration><!--指定日志文件路径(与当前程序jar包同一目录下)--><propertyname="LOG_HOME"value="logs"/><!--每天生成日志的类--><appendername="fileInfoLog"class="ch.qos..core.rolling.RollingFileAppender"><filterclass="ch.qos..classic.filter.LevelFilter"><level>ERROR</level><!--过滤掉error的级别--><onMatch>DENY</onMatch><onMismatch>ACCEPT</onMismatch></filter><encoder><pattern>%d{yyyy-MM-ddHH:mm:ss.SSS}%-5level[%thread]%logger-%msg%n</pattern></encoder><!--滚动策略--><rollingPolicyclass="ch.qos..core.rolling.TimeBasedRollingPolicy"><!--路径--><fileNamePattern>${LOG_HOME}/mds-tool-box-info.%d.log</fileNamePattern></rollingPolicy></appender><appendername="fileErrorLog"class="ch.qos..core.rolling.RollingFileAppender"><filterclass="ch.qos..classic.filter.ThresholdFilter"><level>ERROR</level><!--//打印error--></filter><encoder><pattern>%d{yyyy-MM-ddHH:mm:ss.SSS}%-5level[%thread]%logger-%msg%n</pattern></encoder><!--滚动策略--><rollingPolicyclass="ch.qos..core.rolling.TimeBasedRollingPolicy"><!--路径--><fileNamePattern>${LOG_HOME}/mds-tool-box-error.%d.log</fileNamePattern></rollingPolicy></appender><rootlevel="info"><!--<appender-refref="consoleLog"/>--><appender-refref="fileInfoLog"/><appender-refref="fileErrorLog"/></root></configuration>2、自定义指定日志文件存储目录

2.1 定义监听器

/***@version1.0*@class:CustomLogContextListener*@author:carlo*@mail:carlo_cwh@qq.com*@date:2021/8/2510:01*@description:定义logback日志监听器,指定日志文件存放目录*/publicclassCustomLogContextListenerextendsContextAwareBaseimplementsLoggerContextListener,LifeCycle{/**存储日志路径标识*/publicstaticfinalStringLOG_PAHT_KEY="LOG_PATH";@OverridepublicbooleanisResetResistant(){returnfalse;}@OverridepublicvoidonStart(LoggerContextloggerContext){}@OverridepublicvoidonReset(LoggerContextloggerContext){}@OverridepublicvoidonStop(LoggerContextloggerContext){}@OverridepublicvoidonLevelChange(Loggerlogger,Levellevel){}@Overridepublicvoidstart(){//"user.dir"是指用户当前工作目录Strings=System.getProperty("user.dir")+"/logs/";System.setProperty(LOG_PAHT_KEY,s);Contextcontext=getContext();context.putProperty(LOG_PAHT_KEY,s);}@Overridepublicvoidstop(){}@OverridepublicbooleanisStarted(){returnfalse;}}

2.2 在logback.xml日志文件中指定监听器

<?xmlversion="1.0"encoding="UTF-8"?><configuration><!--监听器,指定日志文件存放目录--><contextListenerclass="com.hh.listener.CustomLogContextListener"/><!--每天生成日志的类--><appendername="fileInfoLog"class="ch.qos.logback.core.rolling.RollingFileAppender"><filterclass="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><!--过滤掉error的级别--><onMatch>DENY</onMatch><onMismatch>ACCEPT</onMismatch></filter><encoder><pattern>%d{yyyy-MM-ddHH:mm:ss.SSS}%-5level[%thread]%logger-%msg%n</pattern></encoder><!--滚动策略--><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路径--><fileNamePattern>${LOG_PATH}/mds-tool-box-info.%d.log</fileNamePattern></rollingPolicy></appender><appendername="fileErrorLog"class="ch.qos.logback.core.rolling.RollingFileAppender"><filterclass="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level><!--//打印error--></filter><encoder><pattern>%d{yyyy-MM-ddHH:mm:ss.SSS}%-5level[%thread]%logger-%msg%n</pattern></encoder><!--滚动策略--><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路径--><fileNamePattern>${LOG_PATH}/mds-tool-box-error.%d.log</fileNamePattern></rollingPolicy></appender><rootlevel="info"><!--<appender-refref="consoleLog"/>--><appender-refref="fileInfoLog"/><appender-refref="fileErrorLog"/></root></configuration>

其中 ${LOG_PATH} 为我们在监听器中定义的 key 值

logback基本配置说明

logback继承自log4j,它是spring boot默认的日志集成框架,官网地址:https://logback.qos.ch/

spring boot默认日志框架

当我们启动spring boot项目的时候,没有进行任何日志的配置,控制台能输出日志,原因是spring boot内置了org.springframework.boot.logging.logback日志,里面配置了base.xml文件,引入了基础的日志输出格式。

当我们项目部署到服务器后,会在与jar同级的目录下生成一个默认日志文件,文件名为jar包的名称。

自定义logback配置文件

默认的日志文件,生成的日志格式配置不是我们所希望的,默认日志输出格式:

此时我们可以自定义logback配置文件,默认的日志文件名为logback.xml,spring官方首推的默认日志文件名为logback-spring.xml;若是我们想命名为其他的名称,也是可以的,在properties或者yml配置文件中指明下日志路径和名称即可:

logging:config:classpath:logback-xxx.xml

日志文件统一放在目录:src/resources之下。

配置文件说明

先来看一个完整的配置文件:

<?xmlversion="1.0"encoding="utf-8"?><!--自动扫描配置文件,间隔周期是60秒,不打印logback的内部日志信息--><configurationscan="true"scanPeriod="60seconds"debug="false"><!--根据spring激活的配置文件定义不同的属性--><springProfilename="local"><!--local环境,日志的存放位置--><propertyname="LOG_HOME"value="/Users/work/tools/logs/xxx"/><!--local环境,控制台输出的日志级别--><propertyname="CONSOLE_LEVEL"value="INFO"/></springProfile><springProfilename="dev"><!--dev环境,日志的存放位置--><propertyname="LOG_HOME"value="/u01/logs/xxx"/><!--pro环境,控制台输出的日志级别--><propertyname="CONSOLE_LEVEL"value="OFF"/></springProfile><springProfilename="pro"><!--pro环境,日志的存放位置--><propertyname="LOG_HOME"value="/u01/logs/xxx"/><!--pro环境,控制台输出的日志级别--><propertyname="CONSOLE_LEVEL"value="OFF"/></springProfile><!--日志存放最大数量--><propertyname="maxHistory"value="30"/><!--定义控制台输出的日志信息--><appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"><!--把事件转化成byte数组,并把数组输出为文本--><encoder><!--定义输出的日志格式--><pattern>%d{yyyy-MM-ddHH:mm:ss}[%thread]%-5level%logger{20}-%msg%n</pattern></encoder><!--过滤输出的日志--><filterclass="ch.qos.logback.classic.filter.ThresholdFilter"><!--定义日志的级别,大于此级别才输出日志--><level>${CONSOLE_LEVEL}</level></filter></appender><!--定义滚动日志--><appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><!--日志的存放名:目录+文件名--><file>${LOG_HOME}/auth-open.info.log</file><encoder><!--日志输出格式--><pattern>%d{yyyy-MM-ddHH:mm:ss}[%thread]%-5level%logger{20}-%msg%n</pattern></encoder><!--基于时间滚动的日志--><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--文件名的定义规则--><fileNamePattern>${LOG_HOME}/auth-open.info.%d{yyyy-MM-dd}.log</fileNamePattern><!--保存文件的最大记录--><maxHistory>${maxHistory}</maxHistory></rollingPolicy></appender><!--错误文件的滚动配置--><appendername="FILE-ERROR"class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_HOME}/auth-open.error.log</file><filterclass="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter><encoder><pattern>%d{yyyy-MM-ddHH:mm:ss}[%thread]%-5level%logger{20}-%msg%n</pattern></encoder><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_HOME}/auth-open.error.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>${maxHistory}</maxHistory></rollingPolicy></appender><!--根目录日志级别是info--><rootlevel="INFO"><appender-refref="STDOUT"/><appender-refref="FILE"/><appender-refref="FILE-ERROR"/></root></configuration>

配置文件描述:

①配置文件有变动自动扫描,扫描周期是60秒。

②输出的根目录日志级别是info,日志文件配置了控制台输出,滚动日志输出,错误日志输出。

③根据spring不同的激活环境,日志的输出目录配置为不同的值;开发环境控制台出入的级别为info(与根目录保持一致),线上环境和测试环境为off(不输出日志,因为控制台输出的日志与发布的jar包在同一目录下,没法进行删除,造成日志文件冗余)。

④以日期为滚动文件的存储策略,设置日志最大存储量为30,大于30时,自动删除创建是时间最早的日志。

configuration

configuration是最外层的配置,在其内包含所有的配置信息。

scan:当配置文件发生变动时,是否自动扫描配置信息,true:自动扫描,false:不扫描。

scanPeriod:自动扫描的时间周期,默认是毫秒,当scan为true时才有效。

debug:是否打印logback内部日志信息,默认是false。

springProfile

根据spring boot项目激活的文件,定义对应的配置信息,用于区分同一变量在不同环境下的值。

name:用于指定激活的配置文件,例如测试环境spring.profiles.active为dev,线上环境为pro,此时可以给不同的环境下同一变量设置不同的属性值。

property:定义变量,name为后续引用的名称,value为变量的值,后续可以使用${}引用此变量。

root

root为配置文件的根节点,可以配置日志的级别和日志输出的引用。

level:日志级别。

appender-ref:日志追加的引用,配置ref值与appender标签关联使用。

appender

定义日志追加的相关信息,name的值与appender-ref中的ref值对应。

ConsoleAppender

控制台输出日志的类,存在于包ch.qos.logback.core.ConsoleAppender下,可以配置控制台输出的格式,日志级别。

RollingFileAppender

滚动日志的类,存在于包ch.qos.logback.core.rolling.RollingFileAppender,可以滚动存放日志信息。

RollingPolicy

滚动日志的策略,可以根据时间滚动TimeBasedRollingPolicy,时间和文件大小滚动SizeAndTimeBasedRollingPolicy。

fileNamePattern:滚动文件名的表达式。

maxHistory:最大历史记录,当大于最大历史记录时,会删除创建时间最早的一份日志记录

encoder

把事件转化成byte数组,并把数组输出为文本。

pattern

输出日志的格式表达式,例:

<pattern>%d{yyyy-MM-ddHH:mm:ss}[%thread]%-5level%logger{20}-%msg%n</pattern>

%d:日期格式表达式,语法与SimpleDataFormat相同。

%thread:线程名。

%-5level:日志级别的前五位字符。

%logger{20}:输出类名(从左开始缩短 ,每个层级至少保留1位),20位,例:

完整logger名:cn.xbz.test.HelloController%logger:cn.xbz.test.HelloController%logger{0}:HelloController%logger{5}:c.x.t.HelloController%logger{20}:c.x.test.HelloController

msg:日志信息。

level级别

logback有5种级别,分别是Trace<Debug<Info<Warn<Error。

Trace:追踪,就是程序推进一下,你就可以写个trace输出。

Debug:指出细粒度信息事件,对调试程序非常有帮助。

Info:粗粒度级别上突出强调应用程序的运行过程。

Warn:输出警告及warn以下级别的日志。

Error:输出错误信息日志。

Off:关闭全部日志输出。

All:开启全部日志输出。

如果logger没有分配日志级别,会从被分配级别最近的父类那里继承级别,root logger默认级别是Debug。

关于“logback怎么自定义指定日志文件存储目录”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部