2012-06-04 6 views
5

私はjava.util.logging.loggerを使用して、sdcard上のファイルにログを記録しようとしています。今、私はロガーにsdcardで提供するロギング設定/プロパティファイルを使用したいと思います。私がしようとしているsdcardに配置されたロギングプロパティファイルを使用するために、Androidでjava.util.logging.loggerを設定する方法は?

一つの方法は次のとおりです。 -

私はLogManagerのとjava.util.prefs.preferencesを使用しようとしてきたが、私はてBackingStoreExceptionを取得 - > AccessPermission例外はまでperculating .java/.userprefs/pathがstr/prefs.xmlで表されるエラーメッセージが見つかりませんでした。

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

} 

誰かが少し洞察してください。

答えて

7

@顔をしていることがあります。これは、それがどのように動作するかです: -

 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 

ここlogging.propertiesで使用されている2件のハンドラがあることに注意してください。 1つはファイルハンドラで、ファイルにログオンし、もう1つはcom.android.internal.logging.AndroidHandler(logcatに適切にログを表示する責任を負う)です。 logcatのログも見たい場合は、com.android.internal.logging.AndroidHandlerを追加する必要があります。ロギングプロパティーにこのハンドラーを追加しない場合、すべてのログはlogcatでsys.err(警告レベル)としてスローされます。

+0

logging.propertiesファイルの読み込み方法は? –

1

-Robin

使用可能なドキュメントを通過すると、いくつかヒットし、トライアルを行った後android-logging-log4j

+0

リンク内のデータは有望です。私はそれを試してみる。ありがとう8] – drulabs

+0

この時点で、私はlog4jを使用するつもりはありません。 java util logger – Robin

関連する問題