Вопрос по android – Как настроить java.util.logging.logger в Android для использования файла свойств журнала, размещенного на SD-карте?

5

Я пытался использовать java.util.logging.logger для входа вещи в файл на SDCard. Теперь я хочу, чтобы регистратор использовал файл конфигурации / свойств регистрации, который я предоставлю на SD-карте.

Один способ, который я пытался это:

Я пытался использовать logmanager и java.util.prefs.preferences, но я получаюBackingStoreException-->AccessPermission Exception Вычисляем до сообщения об ошибке, что .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" );
    }

}

Кто-нибудь может дать некоторое представление, пожалуйста?

-Робин

Ваш Ответ

2   ответа
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 (который отвечает за правильное отображение журналов в logcat). Добавление com.android.internal.logging.AndroidHandler необходимо, если вы также хотите видеть журналы в logcat. Если вы не добавите этот обработчик в свойствах журналирования, все журналы будут выброшены на logcat как sys.err (уровень предупреждения).

Как загрузить файл logging.properties?
1
Данные в ссылке выглядят многообещающе. Я это попробую. Спасибо 8]
На данный момент я не собираюсь использовать log4j. Просто утилита регистрации Java Robin

Похожие вопросы