2012-06-04 28 views
5

He estado tratando de usar java.util.logging.logger para registrar cosas en un archivo en sdcard. Ahora, quiero que el registrador use un archivo de configuración/propiedades de registro que proporcionaré en la tarjeta SD.Cómo configurar java.util.logging.logger en android para usar un archivo de propiedades de registro colocado en la tarjeta sd?

Una manera en que he estado tratando es: -

he estado tratando de utilizar logmanager y java.util.prefs.preferences, pero me da la BackingStoreException - Excepción> AccessPermission perculating hasta una mensaje de error que .java/.userprefs/ruta representada por str/prefs.xml no se encontró.

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

} 

¿Puede alguien dar alguna idea, por favor?

-Robin

Respuesta

7

Después de pasar por la documentación disponible y haciendo algo de éxito y ensayos. Así es como funciona: -

 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 

Tenga en cuenta que hay dos controladores que se utilizan en los logging.properties aquí. Uno es el manejador de archivos, que inicia sesión en el archivo, y el otro es com.android.internal.logging.AndroidHandler (que es responsable de mostrar los registros correctamente en logcat). La adición de com.android.internal.logging.AndroidHandler es necesaria si también desea ver los registros en logcat. Si no agrega este manejador en las propiedades de registro, todos los registros se lanzarán en logcat como sys.err (nivel de advertencia).

+0

¿Cómo cargar el archivo logging.properties? –

1

Usted puede echar un vistazo @android-logging-log4j

+0

los datos en el enlace parecen prometedores. Lo intentaré. Gracias 8] – drulabs

+0

En este punto, no tengo la intención de usar log4j. Solo el registrador utilitario java – Robin

Cuestiones relacionadas