我在Android中使用java.util.logging
,因为我需要记录除系统日志之外的其他输出。目前我正在使用java.util.logging.SimpleFormatter
。当它记录到文件时,它使用默认语言环境格式化日期和时间戳,在我的情况下使其难以阅读(非欧洲数字,复杂的用例,长篇故事)。
在java.util.Formatter
(而不是java.util.logging.Formatter
)中,您可以为构造函数提供Locale参数,因此您可以根据需要指定ROOT语言环境:
Formatter formatter = new Formatter(sb, Locale.ROOT);
(以类似的方式,您可以将区域设置参数传递给String.format()
。)但java.util.logging.Formatter
及其后代似乎无法指定所使用的区域设置。
我可以延长Formatter
或SimpleFormatter
并覆盖format()
或formatMessage()
,但我没有看到任何挂钩用于格式化日期/时间邮票,所以我必须重写格式化整个LogRecord的功能。这可能不是太糟糕,但它比提供语言环境要优化得多(而且更容易出错)。
我目前的策略是复制和修改SimpleFormatter.format()的代码,但当然会将应用从未来的修复程序中删除。
还有其他想法吗?
答案 0 :(得分:1)
您可以将format of the SimpleFormatter
更改为任何pattern supported by the java.util.Formatter
。正如您所指出的,SimpleFormatter
始终使用Locale.getDefault()
来格式化日志记录。
尝试使用java.util.Locale.setDefault(Locale.Category, Locale)
将格式类别设置为Locale.ROOT
。例如:
java.util.Locale.setDefault(Locale.Category.FORMAT, Locale.ROOT);
否则,您必须尝试按java.util.logging.SimpleFormatter文档中所述格式化日期的各个部分:
java.util.logging.SimpleFormatter.format =“%1 $ tb%1 $ td,%1 $ tY%1 $ tl:%1 $ tM:%1 $ tS%1 $ Tp%2 $ s% n%4 $ s:%5 $ s%n“
免责声明:我是JavaMail项目中包含的com.sun.mail.util.logging
的内容开发人员。如果您使用com.sun.mail.util.logging.CompactFormatter
,则会选择分配给日志记录的locale of the resource bundle。如果您没有使用本地化,那么null is used as the default locale应该与ROOT相同。
作为最后的手段,您必须自己动手或找到第三方库。