我一直在尝试使用 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" );
}
}
有人可以提供一些见解吗?
-罗宾
最佳答案
在阅读了可用的文档并做了一些命中和试验之后。这是它的工作原理:-
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);
日志记录属性
############################################################
# 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 中使用了两个处理程序。一个是filehandler,负责登录文件,另一个是com.android.internal.logging.AndroidHandler(负责在logcat中正确显示日志)。如果您还想在 logcat 中查看日志,则必须添加 com.android.internal.logging.AndroidHandler。如果您不在日志记录属性中添加此处理程序,所有日志将作为 sys.err(警告级别)抛出到 logcat 上。
关于android - 如何在 android 中配置 java.util.logging.logger 以使用放置在 sdcard 上的日志记录属性文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10880756/