java logback手动加载配置文件

时间:2021-06-08 04:39:17

废话不多说直接上代码:

一共两个java文件,第一个是例子,第二个是配置文件加载类;

LogbackTest.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logbacktest;

import ch.qos.logback.core.joran.spi.JoranException;
import java.io.IOException;
import org.slf4j.LoggerFactory;

/**
 *
 * @author Administrator
 */
public class LogbackTest {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException, JoranException {
        LogBackConfigLoader.load("logback-log.xml");
        org.slf4j.Logger logger = LoggerFactory.getLogger("snail");
        logger.debug("Hello");
    }
}
LogBackConfigLoader.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logbacktest;
import java.io.File;
import java.io.IOException;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;
import ch.qos.logback.core.util.StatusPrinter;
 
/**
 * Simple Utility class for loading an external config file for logback
 * @author daniel
 */
public class LogBackConfigLoader {
 
	public static void load (String externalConfigFileLocation) throws IOException, JoranException{
		LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
		
		File externalConfigFile = new File(externalConfigFileLocation);
		if(!externalConfigFile.exists()){
			throw new IOException("Logback External Config File Parameter does not reference a file that exists");
		}else{
			if(!externalConfigFile.isFile()){
				throw new IOException("Logback External Config File Parameter exists, but does not reference a file");
			}else{
				if(!externalConfigFile.canRead()){
					throw new IOException("Logback External Config File exists and is a file, but cannot be read.");
				}else{
					JoranConfigurator configurator = new JoranConfigurator();
					configurator.setContext(lc);
					lc.reset();
					configurator.doConfigure(externalConfigFileLocation);
					StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
				}
			}	
		}
	}
	
}

附上一个简单的logback-log.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   
        <!-- encoder 默认配置为PatternLayoutEncoder -->   
        <encoder>   
            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss}  %msg%n</pattern>   
        </encoder>   
    </appender>  
    <appender name="debug" class="ch.qos.logback.core.FileAppender">
        <File>log/debug.log</File>
        <Append>true</Append>
        <encoder>
            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss}  %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>TRACE</level>
        </filter>
    </appender>
    <logger name="snail" level="TRACE" additivity="false"> 
        <appender-ref ref="debug"/>
    </logger>
</configuration>