2012-06-04 6 views
5

Ich habe versucht, java.util.logging.logger zu verwenden, um Sachen auf einer Akte auf sdcard zu protokollieren. Nun möchte ich, dass der Logger eine Protokollierungskonfiguration/Eigenschaftendatei verwendet, die ich auf der SD-Karte bereitstellen werde.Wie konfiguriert man java.util.logging.logger in Android, um eine Logging-Eigenschaftendatei auf der SD-Karte zu verwenden?

Eine Möglichkeit, dass ich versucht habe, ist: -

Ich habe versucht, logmanager und java.util.prefs.preferences zu verwenden, aber ich bekomme die BackingStoreException -> Access Ausnahme auf ein perculating nach unten Fehlermeldung, dass .java/.userprefs/path von str/prefs.xml wurde nicht gefunden.

private void setLoggingProperties(File logProperties) throws Exception { 
    try { 
    if(logProperties!=null && logProperties.isFile() && logProperties.exists()) { 
     String str = logProperties.getAbsolutePath(); 
     MyLogger.v(TAG,"Log Properties file path: " + str); 
     if(str!=null && str.length()>=0) { 
      Preferences logPropPref = Preferences.userNodeForPackage(SSCService.class); 

      if(logPropPref!=null) { 
       String path = logPropPref.get(LOG_CONFIG_FILE_KEY,""); 
       if(path.equals(str)) { 
        SirfLogger.v(TAG,"No need to set config for log"); 
        return; 
       } 
       MyLogger.v(TAG,"Setting log properties: " + str); 
       logPropPref.put(LOG_CONFIG_FILE_KEY, str); 
       logPropPref.flush(); 
      } 
      LogManager lManager = LogManager.getLogManager(); 
      if(lManager!=null) { 
       lManager.readConfiguration(); 
      } 

     } 

    } 
    } catch(Exception ex) { 
     MyLogger.v(TAG, "Exception setting log properties: " + ex.toString() + " , ignoring"); 
    } 

} 

Darf jemand bitte Einblick geben?

-Robin

Antwort

7

Nachdem durch die verfügbare Dokumentation zu gehen und einige Treffer und Studien zu tun. Dies ist, wie es funktioniert: -

 static final String LOGGER_NAME = "com.robin.mylogger" 
     LogManager lManager = LogManager.getLogManager(); 
     FileInputStream is = new FileInputStream(logProperties); 
     if(lManager!=null) { 
      lManager.readConfiguration(is); 

     } 
     mLoggerInstance = Logger.getLogger(LOGGER_NAME); 
     if(mLoggerInstance!=null) 
      LogManager.getLogManager().addLogger(mLoggerInstance); 

logging.properties

   ############################################################ 
       # Default Logging Configuration File 
# 
# You can use a different file by specifying a filename 
# with the java.util.logging.config.file system property. 
# For example java -Djava.util.logging.config.file=myfile 
############################################################ 

############################################################ 
# Global properties 
############################################################ 

# "handlers" specifies a comma separated list of log Handler 
# classes. These handlers will be installed during VM startup. 
# Note that these classes must be on the system classpath. 
# By default we only configure a ConsoleHandler, which will only 
# show messages at the INFO and above levels. 
#handlers= java.util.logging.ConsoleHandler 

# To also add the FileHandler, use the following line instead. 
handlers= java.util.logging.FileHandler, com.android.internal.logging.AndroidHandler 

# Default global logging level. 
# This specifies which kinds of events are logged across 
# all loggers. For any given facility this global level 
# can be overriden by a facility specific level 
# Note that the ConsoleHandler also has a separate level 
# setting to limit messages printed to the console. 
.level= FINEST 

############################################################ 
# Handler specific properties. 
# Describes specific configuration info for Handlers. 
############################################################ 

# default file output is in user's home directory. 
java.util.logging.FileHandler.pattern = /mnt/sdcard/csr/logs/test.log 
java.util.logging.FileHandler.limit = 5000000 
java.util.logging.FileHandler.count = 1 
java.util.logging.FileHandler.level = FINEST 
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 = FINEST 
#java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 

com.android.internal.logging.AndroidHandler.level = FINEST 
com.android.internal.logging.AndroidHandler.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.robin.mylogger.level = FINEST 

Bitte beachten Sie, dass es zwei Handler hier in den logging.properties verwendet wird. Einer ist der Dateihandler, der sich an der Datei anmeldet, und der andere ist com.android.internal.logging.AndroidHandler (der für das korrekte Anzeigen der Protokolle in logcat verantwortlich ist). Das Hinzufügen von com.android.internal.logging.AndroidHandler ist erforderlich, wenn Sie die Protokolle auch in logcat anzeigen möchten. Wenn Sie diesen Handler nicht in den Protokollierungseigenschaften hinzufügen, werden alle Protokolle in logcat als sys.err (Warnstufe) ausgegeben.

+0

Wie lade ich die Datei logging.properties? –

1

Sie haben einen Blick @android-logging-log4j

+0

die Daten in der Verbindung sieht vielversprechend aus. Ich werde es ausprobieren. Danke 8] – drulabs

+0

An diesem Punkt beabsichtige ich nicht, log4j zu verwenden. Just the java util logger – Robin

Verwandte Themen