How to specify a logback configuration as a classpath resource rather than a file

logback programmatic configuration
multiple logback.xml files on classpath
logback.xml environment variable
logback multiple configuration files
logback include
logback xml is not of type file
logback filter
logback documentation

I have the following situation. I need to be able to run two programs launched by different batch files where each batch file invokes a java class with main() from the same jar. I would like each program to have its own log. However, the second program is an installer for the first, and therefore, I don't want to/can't easily specify -Dlogback.configurationFile=/path/to/config file as that location may not yet exist.

Logback documentation seems to provide a solution but I need an example of how to make it work:

Specifying the location of the default configuration file as a system property

If you wish, you can specify the location of the default configuration file with a system property named logback.configurationFile. The value of this property can be a URL, a resource on the class path or a path to a file external to the application.

java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1

Can anyone point me to an example where logback.configurationFile is defined as a resource on the classpath as opposed to the file system?

You can simply put a my-logback.xml in the root of one of your classpath entries and specify -Dlogback.configurationFile=my-logback.xml. Internally it will probably use ClassLoader#getResource(String name) to get the file - check the JavaDoc of this method for more information.

Chapter 3: Logback configuration, If no such file is found, it checks for the file logback.xml in the classpath. Its contents should specify the fully qualified class name of the desired LoggerContext[default] - Found resource [logback-test.xml] 17:44:58,671 |-INFO in Instead of invoking StatusPrinter programmatically from your code, you can instruct the� Uses logback.xml for configuration; This configuration file must be modifiable from a parameterized external location. After we modify the configuration file, the changes have to live after 60

the answer to this question is in the supplied link: https://logback.qos.ch/manual/configuration.html#configFileProperty with the examples below:

The contents to include can be referenced as a file, as a resource, or as a URL.

As a file:
To include a file use the file attribute. You can use relative paths but note that the current directory is defined by the application and is not necessarily related to the path of the configuration file.

As a resource:
To include a resource, i.e a file found on the class path, use the resource attribute.

<include resource="includedConfig.xml"/>

As a URL:
To include the contents of a URL use the url attribute.

<include url="http://some.host.com/includedConfig.xml"/>

Chapter 9: Logging separation - Logback, this chapter, you need to make sure that certain jar files are present on the classpath. If you wish to, you may specify a different configuration file other than the web-application, if you wish to specify aFolder/my_config.xml instead of the to remember is that the configuration is looked up as a Java resource using the� OPTION 1: specify the location of the logback configuration file with the logback.configurationFile system property. This does in fact allow you to have multiple configuration files per project. As per the logback documentation, the value of the this property can be a URL, a resource on the class path or a path to a file external to the

File inclusion � The logback manual, Example: File include (logback-examples/src/main/resources/chapters/ You can use relative paths but note that the current directory is defined by the To include a resource, i.e a file found on the class path, use the resource attribute. Load a logback.xml Configuration File Programmatically Today I had a unique situation where I needed to load a logback.xml file programmatically for Logback logging rather than via the standard "from the classpath" way, and here's how I did it.

OK I went ahead and tried it out.

If the logback config file is local to the jar (in the same jar you're running in), this works:

System.setProperty("logback.configurationFile", "org/package/path/your.logback.xml");

works. If it's in the classpath 'anywhere'. Which is really weird since normally with a call to getResource you have to specify it with a preceding slash like:

YourClass.class.getResource("/org/package/path/your.logback.xml") so not sure why.

Other more exotic resource paths like specifying the exact jar also seem to not work. Weird.

Logback Configuration: Using XML, In a Spring Boot application, you can put the Logback.xml file in the resources folder. If your Logback.xml file is outside the classpath, you need to point to its Here is the configuration code to define console and file appenders: as explained here, it is recommended to use encoders instead of layouts. Logback invokes very similar code to the code in your example, i.e. getClassLoader().getResourceAsStream("logback.xml"). If logback cannot find logback.xml, then it must be that the resource is not visible to the class loader that loaded the logback class.

A Guide To Logback, Logback offers a faster implementation than Log4j, provides more We'll create a text file named logback.xml and put it somewhere in our classpath: A Logger has a Level, which can be set either via configuration or with Logger. the Appender to append to an existing file rather than truncating it. 2. Send logs to File + Rotate File. 2.1 All logging will be redirected to a file logs/app.log.Furthermore, this log file will be archived daily or when the file size is larger than 10MB.

77. Logging, To use Logback you need to include it and jcl-over-slf4j (which implements the (e.g. classpath:logback.xml for Logback), but you can set the location of the config file resource="org/springframework/boot/logging/logback/file-appender. xml"� §Changing the logback configuration file. You can also specify another logback configuration file via a System property. It is particulary useful when running in production. §Using -Dlogger.resource. Specify another logback configuration file to be loaded from the classpath: $ start -Dlogger.resource=prod-logger.xml §Using -Dlogger.file

Logback 1.3.0-alpha4 Manual, If no such file is found, it checks for the file logback.xml in the classpath. Its contents should specify the fully qualified class name of the desired LoggerContext[default] - Found resource [logback-test.xml] 17:44:58,671 |-INFO in Instead of invoking StatusPrinter programmatically from your code, you can instruct the� Specify a log4j configuration file: jvm.bootoptions=-Dlog4j.configuration= my-log4j.properties. This implicitly sets gg.log to log4j as the type of logging implementation and appends slf4j-log4j12 binding to the classpath. Specify a java.util.logging properties file or class:

Comments
  • If it's just the log-file that you wish to change why not define the log-file as a variable in a single logback.xml configuration file. This is particularly good if most of the logging configuration is the same. Then the logfile name can be read from a resource in the classpath or be part of the installer's invocation.
  • that will work, I suppose, but out of curiosity, how would you do it for a place beneath the root on the classpath?
  • I actually tried it now and it does work. Can you check your setup again?
  • You must omit the leading / for it to pull from the classpath. If logback.xml is in the /etc directory in your jar, logback.configurationFile = etc/logback.xml