2013-02-15 17 views
11

Questo è simile a questo altro question, anche se ho già inserito lo logging.properties nel jar eseguibile e non funziona.Impossibile configurare la registrazione per il jar eseguibile

ho una classe (ReportGenerator) che ha il seguente:

Logger logger = Logger.getLogger(ReportGenerator.class.getName()); 
logger.log(Level.INFO, "LOG THIS"); 

sto usando Netbeans così ho messo il file logging.properties nel percorso src/main/resources. Ha questa (tra le altre cose):

# default file output is in user's home directory. 
java.util.logging.FileHandler.pattern = /my/folder/reports.log 
java.util.logging.FileHandler.limit = 50000 
java.util.logging.FileHandler.count = 10 
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 

# Limit the message that are printed on the console to INFO and above. 
java.util.logging.ConsoleHandler.level = OFF 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 


############################################################ 
# Facility specific properties. 
# Provides extra control for each logger. 
############################################################ 

# For example, set the com.xyz.foo logger to only log SEVERE 
# messages: 
com.mypackage.ReportGenerator.level = ALL 

Il vaso viene generato utilizzando Maven, quando decompresso posso vedere che la logging.properties è nella cartella principale del vaso. Insieme alla cartella com dove si trova la mia classe.

-com 
    -mypackage 
     -ReportGenerator 
logging.properties 
...other things 

quando mi allontano dalla console:

java - jar MyReportsJar.jar 

E mi mostra i log attraverso la console. Voglio collegarlo al file che ho impostato nel logging.properties.

Cosa sto facendo di sbagliato? Come faccio a farlo senza impostare il parametro JVM java.util.logging.config.file?

risposta

12

Dopo aver affrontato alcuni giorni contro questa e la lettura di molte risorse su Internet mi si avvicinò con questa soluzione:

devo cambiare le proprietà di registrazione del LogManager nel programma. Posso utilizzare il file logging.properties confezionato nella .jar come questo:

LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties")); 

E poi posso fare lo stesso di prima per ottenere il logger e log:

Logger logger = Logger.getLogger(ReportGenerator.class.getName()); 
logger.log(Level.INFO, "LOG THIS"); 

ma ho trovato molto utile che si può specificare un altro file logging.properties sul runtime quindi il mio codice finale è questo:

 String logFile = System.getProperty("java.util.logging.config.file"); 
     if(logFile == null){ 
      LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties")); 
     }     
     Logger logger = Logger.getLogger(ReportGenerator.class.getName()); 
     logger.log(Level.INFO, "LOG THIS"); 

in questo modo, se eseguo il barattolo come questo:

java -jar MyReportsJar.jar 

Utilizza il file interno logging.properties.

Ma se eseguo:

java -Djava.util.logging.config.file=<external-logging.properties> -jar MyReportsJar.jar 

utilizza il file esterno logging.properties.

Problemi correlati