2012-10-25 10 views
8

Ho la seguente situazione. Devo essere in grado di eseguire due programmi lanciati da diversi file batch in cui ogni file batch richiama una classe java con main() dallo stesso jar. Vorrei che ogni programma avesse il proprio registro. Tuttavia, il secondo programma è un programma di installazione per il primo e, pertanto, non desidero/non posso facilmente specificare -Dlogback.configurationFile =/percorso/su/file di configurazione poiché tale posizione potrebbe non esistere ancora.Come specificare una configurazione di logback come risorsa del classpath piuttosto che un file

Logback documentation seems to provide a solution ma ho bisogno di un esempio di come farlo funzionare:

Specificare la posizione del file di configurazione di default come un sistema proprietà

Se lo si desidera, è possibile specificare la posizione di il file di configurazione di default con una proprietà di sistema denominata logback.configurationFile. Il valore di questa proprietà può essere un URL, una risorsa sul percorso classe o un percorso in un file esterno all'applicazione.

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

Qualcuno mi può indicare un esempio in cui logback.configurationFile è definito come una risorsa nel classpath come opposto al file system?

+0

Se è solo il file di registro che si desidera modificare, perché non definire il file di registro come variabile in un singolo file di configurazione logback.xml. Ciò è particolarmente buono se la maggior parte della configurazione di registrazione è la stessa. Quindi il nome del file di log può essere letto da una risorsa nel classpath o essere parte del richiamo dell'installatore. – andygavin

risposta

10

È possibile semplicemente inserire un my-logback.xml nella radice di una delle voci del percorso di classe e specificare -Dlogback.configurationFile=my-logback.xml. Internamente probabilmente utilizzerà ClassLoader#getResource(String name) per ottenere il file - controllare il JavaDoc di questo metodo per ulteriori informazioni.

+0

che funzionerà, suppongo, ma per curiosità, come lo faresti per un posto sotto la radice sul classpath? –

+1

No, non funziona –

+1

In realtà l'ho provato ora e funziona. Puoi controllare di nuovo la tua configurazione? –

1

la risposta a questa domanda è nel link fornito: con esempi qui sotto:

I contenuti da includere può essere fatto riferimento come un file, come risorsa, o come un 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"/>