如何设置java.util.logging.Formatter使用的语言环境?

时间:2018-03-30 19:59:55

标签: java android locale java.util.logging

我在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及其后代似乎无法指定所使用的区域设置。

我可以延长FormatterSimpleFormatter并覆盖format()formatMessage(),但我没有看到任何挂钩用于格式化日期/时间邮票,所以我必须重写格式化整个LogRecord的功能。这可能不是太糟糕,但它比提供语言环境要优化得多(而且更容易出错)。

我目前的策略是复制和修改SimpleFormatter.format()的代码,但当然会将应用从未来的修复程序中删除。

还有其他想法吗?

1 个答案:

答案 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相同。

作为最后的手段,您必须自己动手或找到第三方库。