java - How to set logback configuration file at runtime? -
i have logback.xml file production , 1 different parameters on staging environment. code able automatically know @ runtime if on production or runtime. there way set logback configuration file @ runtime?
method 1: loading different files
you can hold 2 different configurations files , load file specific enviroment joranconfiguratior#doconfigure
@ application startup.
see http://logback.qos.ch/manual/configuration.html#jorandirectly. example code taken there modifications case:
public class myapp3 { final static string staging_configuration = "/path/to/statging.xml"; final static string production_configuration = "/path/to/production.xml"; final static logger logger = loggerfactory.getlogger(myapp3.class); public static void main(string[] args) { // assume slf4j bound logback in current environment loggercontext context = (loggercontext) loggerfactory.getiloggerfactory(); // determine environmental specific configuration path final string path = isprodcution() ? production_configuration : staging_configuration; try { joranconfigurator configurator = new joranconfigurator(); configurator.setcontext(context); // call context.reset() clear previous configuration, e.g. default // configuration. multi-step configuration, omit calling context.reset(). context.reset(); configurator.doconfigure(path); } catch (joranexception je) { // statusprinter handle } statusprinter.printincaseoferrorsorwarnings(context); logger.info("entering application."); foo foo = new foo(); foo.doit(); logger.info("exiting application."); } }
of course, code getting correct filename adjusted fitting needs. futhermore, there overloaded doconfigure
methods (http://logback.qos.ch/apidocs/ch/qos/logback/core/joran/genericconfigurator.html#doconfigure%28java.io.file%29) takes inputstreams, files , urls als well.
method 2: using conditionals in 1 file
if can determine enviroment using logbag's build in properties or system properties, can use conditional configurations:
http://logback.qos.ch/manual/configuration.html#conditional
<!-- if-then form --> <if condition="condition production"> <then> ... </then> <else> ... </else> </if>
Comments
Post a Comment