2013-02-15 8 views
11

Dies ist ähnlich zu diesem anderen question, obwohl ich bereits die logging.properties in der ausführbaren jar und funktioniert nicht.Kann die Protokollierung für ausführbare jar nicht konfigurieren

Ich habe eine Klasse (Reportgenerator), der die folgenden:

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

Ich bin mit Netbeans, damit ich die logging.properties Datei im src/main/resources Pfad setzen. Es hat dies (unter anderem):

# 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 

Das Gefäß erzeugt wird, unter Verwendung von Maven, wenn dekomprimiert kann ich sehen, dass die logging.properties im Hauptordner des Glases ist. Zusammen mit dem Ordner com wo meine Klasse ist.

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

Wenn ich von der Konsole ausführen:

java - jar MyReportsJar.jar 

Es zeigt mir die Protokolle über die Konsole. Ich möchte es auf die Datei, die ich in der logging.properties.

setzen, was ich eingestellt habe, was mache ich falsch? Wie mache ich es ohne Einstellung der JVM java.util.logging.config.file param?

Antwort

12

Nach ein paar Tage gegen diesen zu tun und viele Ressourcen im Internet zu lesen kam ich mit dieser Lösung:

Ich habe die Protokollierungseigenschaften der LogManager im Programm zu ändern. Ich kann die logging.properties Datei im wie diese .jar verpackt verwenden:

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

Und dann kann ich das gleiche tun wie vor den Logger zu erhalten und log:

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

Aber ich fand sehr nützlich, dass Sie geben Sie eine andere logging.properties Datei zur Laufzeit kann so meine letzte Code ist dies:

 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"); 

diese Weise, wenn ich das Glas wie folgt ausführen:

java -jar MyReportsJar.jar 

Es verwendet die interne logging.properties Datei.

Aber wenn ich ausführen:

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

es die externe logging.properties-Datei verwendet.

Verwandte Themen