重设logback的logback.xml路径
- 格式:docx
- 大小:14.97 KB
- 文档页数:1


解决logback的⽇志⽂件路径问题假如使⽤绝对路径,没有任何问题,就是移植性不太好。
假如使⽤相对路径,则要注意当前路径“.”是在哪⼉?⼀般我们都会在配置⽂件中加⼊log⽂件的存储⽬录,如本⼈通过研究测试发现:1.对于J2SE项⽬,当前路径为⼯程所在⽬录如我的⼯程为:D:\test则使⽤…/logs⽣成的⽇志⽂件位于:D:\logs2.对于J2EE项⽬,当前路径为tomcat\bin所在⽬录如我的tomcat路径为:D:\tomcat\bin则使⽤…/logs⽣成的⽇志⽂件位于:D:\tomcat\logs补充:logback加载外部配置⽂件重置logback配置⽂件路径logback加载外部配置⽂件重置logback配置⽂件路径logback作为⼀种成熟的⽇志框架,已被⼴泛应⽤在现代各种java项⽬中。
以javaweb项⽬为例,使⽤logback.xml作为logback的配置⽂件时,在代码中通常是将该配置⽂件放在src/main/resource/下,部署时该⽂件会放在classpath下。
但是,有时出于各种⽬的,需要将logback的配置⽂件放在特定的⽬录下,此时需要⾃定义logback配置⽂件的加载路径。
logback⾃动加载配置⽂件的优先级如下:1.classpath下的logback-test.xml2.classpath下的logback.groovy3.classpath下的logback.xml4.META-INF/services/ch.qos.logback.classic.spi.Configurator中的 logback 配置实现类5.logback⾃带的默认配置⽂件BasicConfigurator当需要将⽇志配置⽂件放在其他路径下时,其实就是logback重新加载配置⽂件的过程。
参考代码如下:import ch.qos.logback.classic.LoggerContext;import ch.qos.logback.classic.joran.JoranConfigurator;import ch.qos.logback.core.util.StatusPrinter;import java.io.File;public class LogTest{private org.slf4j.Logger logger;private ch.qos.logback.classic.LoggerContext loggerContext;public LogTest(){logger = org.slf4j.LoggerFactory.getLogger(this.class);loggerContext = (LoggerContext) org.slf4j.LoggerFactory.getILoggerFactory();String logbackConfigPath = System.getProperty("user.dir") + "/your_logback_config/logback.xml";File file = new File(logbackConfigPath);if(!file.exists()){logger.error("logbackConfigPath file is no exist");}else{if(!file.isFile()){logger.error("logbackConfigPath file is not a file");}else{if(!file.canRead()){logger.error("logbackConfigPath file can not read");}else{JoranConfigurator joranConfigurator = new JoranConfigurator();joranConfigurator.setContext(loggerContext);loggerContext.reset();try {joranConfigurator.doConfigure(file);} catch (Exception e) {logger.error("logbackConfigPath Load logback config file error. Message: {}",e.getMessage());}StatusPrinter.printInCaseOfErrorsOrWarnings(loggerContext);}}}}}System.getProperty(“user.dir”) 是获取你程序当前的运⾏路径,这⾥也可以把这段代码封装成⼀个⽅法,配置⽂件的路径可以以参数的形式传⼊,也可以写死。
LogBack.xml⽂件配置Logback-spring.xml配置⽂件1、⽇志级别:⽇志级别从低到⾼分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,例如:如果设置为WARN,则低于WARN 的信息都不会输出2、根节点:configuration configuration 有三个可选属性: a、scan属性:⽤来设置配置⽂件变动时是否重新加载,值是true\false,默认是true即配置变动时重新加载 b、scanperiod属性:⽤来设置每隔多久检查⼀次配置是否变动,默认是1分钟,默认单位是毫秒 c、debug属性:⽤来设置是否将logback内部的⽇志打印出来,即启动时输出配置加载信息。
值为true\false 默认为false3、property节点: 设置要使⽤的或者共⽤的变量,property包含两个属性name和value;其中name的值是变量的名称,value的值是变量所代表的值。
<property>定义的值可以使⽤“${变量名}”到logger上下⽂中。
4、springProperty节点该标签的⼯作⽅式类似于Logback的标准<property>标签。
但是,value您⽆需指定direct,⽽是指定source属性的(来⾃Environment)。
如果需要将属性存储在local范围之外的其他位置,则可以使⽤该scope属性。
如果需要后备值(如果未在中设置属性Environment),则可以使⽤defaultValue属性。
5.appender节点appender节点可以有多个,分别针对不同的包或者类做不同的输出,如果appender输出到⽂件时,可以设置append⼦节点值true/false,是末尾追加⽇志还是替换⽇志,值为true时表⽰追加。
可以在appender中使⽤filter节点(过滤器),在此节点内过滤⽇志级别(使⽤level节点指定),过滤后会返回⼀个枚举值,即DENY,NEUTRAL,ACCEPT其中之⼀: A、返回DENY,⽇志将⽴即被抛弃不再经过其他过滤器; B、返回NEUTRAL,有序列表⾥的下个过滤器接着处理⽇志; C、返回ACCEPT,⽇志会被⽴即处理,不再经过剩余过滤器 如果需要使⽤这些值做处理时,需要使⽤onMatch(level级别或⼤于level级别的)和onMismatch(级别⼩于level级别的)6、logger节点⽤来设置某⼀个包或者具体的某⼀个类的⽇志打印级别、以及指定appender。
Logback⼊门和配置说明Logback 是 Log4j 的改进版本,⽽且原⽣⽀持 SLF4J,Logback 的初始化步骤如下:1. 在类路径中查找 logback-test.xml 配置⽂件2. 在类路径中查找 logback.groovy 配置⽂件3. 在类路径中查找 logback.xml 配置⽂件4. 如果都没有找到,那边就是⽤默认配置,将⽇志输出到控制台maven 依赖在使⽤ logback 之前,需要增加相关依赖,slf4j-api 是 slf4j 的核⼼,定义了简单统⼀的接⼝,logback-classic 则是具体的⽇志实现。
<dependencies><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.25</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency></dependencies>⽇志⽰例⾃动⽇志配置配置最简单的⽅法就是使⽤ logback 的默认配置,默认配置是将⽇志输出到控制台,代码如下:package org.lixue.slf4j;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class HelloWorld{final static Logger logger=LoggerFactory.getLogger(HelloWorld.class);public static void main(String[]args){("HelloWorld");}}使⽤ logback-test.xml 或 logback.xml ⾃动配置在类路径中,创建 logback-test.xml 或 logback.xml 配置⽂件,并增加配置如下,该配置等价与⾃动配置:<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!--encoders are assigned the typech.qos.logback.classic.encoder.PatternLayoutEncoderbydefault--><encoder><pattern>%d{HH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern></encoder></appender><root level="debug"><appender-ref ref="STDOUT"/></root></configuration>配置⽂件说明logback 配置⽂件的语法⾮常灵活。
(转)Springboot——logback.xml配置详解(⼆)1 根节点<configuration>包含的属性scan:当此属性设置为true时,配置⽂件如果发⽣改变,将会被重新加载,默认值为true。
scanPeriod:设置监测配置⽂件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
当scan为true时,此属性⽣效。
默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部⽇志信息,实时查看logback运⾏状态。
默认值为false。
例如:<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 其他配置省略--></configuration>2 根节点<configuration>的⼦节点2.1 设置上下⽂名称:<contextName>每个logger都关联到logger上下⽂,默认上下⽂名称为“default”。
但可以使⽤<contextName>设置成其他名字,⽤于区分不同应⽤程序的记录。
⼀旦设置,不能修改。
(并没有感觉有什么作⽤呢)<configuration scan="true" scanPeriod="60 seconds" debug="false"><contextName>myAppName</contextName><!-- 其他配置省略--></configuration>2.2 设置变量:<property>⽤来定义变量值的标签,<property> 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。