2012-06-04 5 views
5

Ho cercato di utilizzare java.util.logging.logger per accedere a un file su sdcard. Ora, voglio che il logger usi un file di configurazione/proprietà di registrazione che fornirò sulla sdcard.Come configurare java.util.logging.logger in Android per utilizzare un file delle proprietà di registrazione posto sulla sdcard?

Un modo che ho cercato è: -

Ho cercato di utilizzare logmanager e java.util.prefs.preferences, ma ho l'BackingStoreException -> AccessPermission Eccezione perculating fino a giungere alla messaggio di errore che .java/.userprefs/percorso rappresentato da str/prefs.xml non è stato trovato.

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

} 

Qualcuno può fornire qualche approfondimento per favore?

-Robin

risposta

7

Dopo aver attraversato la documentazione disponibile e facendo qualche colpo e prove. Ecco come funziona: -

 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 

Si prega di notare che ci sono due gestori di essere utilizzati nelle logging.properties qui. Uno è il gestore di file, che accede al file e l'altro è com.android.internal.logging.AndroidHandler (che è responsabile della visualizzazione dei log correttamente in logcat). L'aggiunta di com.android.internal.logging.AndroidHandler è necessaria se si desidera visualizzare anche i log in logcat. Se non si aggiungerà questo gestore nelle proprietà di registrazione, tutti i registri verranno lanciati su logcat come sys.err (livello di avviso).

+0

Come caricare il file logging.properties? –

1

Si può avere uno sguardo @android-logging-log4j

+0

i dati nel collegamento sembrano promettenti. Lo proverò. Grazie 8] – drulabs

+0

A questo punto, non intendo utilizzare log4j. Solo il logger java util – Robin