2012-06-04 5 views
5

मैं sdcard पर फ़ाइल पर सामान लॉग करने के लिए java.util.logging.logger का उपयोग करने का प्रयास कर रहा हूं। अब, मैं चाहता हूं कि लॉगर एक लॉगिंग कॉन्फ़िगरेशन/गुण फ़ाइल का उपयोग करे जो मैं एसडीकार्ड पर प्रदान करूंगा।sdcard पर रखी लॉगिंग गुण फ़ाइल का उपयोग करने के लिए android में java.util.logging.logger को कॉन्फ़िगर कैसे करें?

एक तरीका यह है कि मैं कोशिश कर रहे हैं है: -

मैं logmanager और java.util.prefs.preferences उपयोग करने के लिए कोशिश कर रहे हैं, लेकिन मैं BackingStoreException प्राप्त करें -> AccessPermission अपवाद एक करने के लिए नीचे perculating त्रुटि संदेश है कि .java/.userprefs/पथ द्वारा समर्थित/strfs.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 यहाँ में इस्तेमाल किया जा रहा देखते हैं कि। एक फ़ाइल हैडलर है, जो फ़ाइल पर लॉग ऑन करता है, और दूसरा com.android.internal.logging.AndroidHandler (जो लॉगकैट में लॉग को ठीक से प्रदर्शित करने के लिए ज़िम्मेदार है) है। Com.android.internal.logging.AndroidHandler के अतिरिक्त यदि आप लॉगकैट में लॉग देखना चाहते हैं तो आवश्यक है। यदि आप लॉगिंग गुणों में इस हैंडलर को नहीं जोड़ेंगे, तो सभी लॉग sycaterr (चेतावनी स्तर) के रूप में logcat पर फेंक दिए जाएंगे।

+0

logging.properties फ़ाइल को कैसे लोड करें? –

1

-Robin आप एक नज़र @android-logging-log4j

+0

लिंक में डेटा आशाजनक लग रहा है। मुझे इसे आज़माना है। धन्यवाद 8] – drulabs

+0

इस बिंदु पर, मैं log4j का उपयोग करने का इरादा नहीं रखता हूं। जावा उपयोग लॉगर – Robin

संबंधित मुद्दे

 संबंधित मुद्दे