gpt4 book ai didi

java - 使用 jdk logging/slf4j 更改日志记录级别本地化名称

转载 作者:搜寻专家 更新时间:2023-11-01 02:43:44 24 4
gpt4 key购买 nike

我看到使用 jdk 日志记录的日志记录级别是本地化的,运行这个例子:

package com.stackoverflow.tests.logging;

import java.util.Locale;
import java.util.logging.Logger;

public class TestLogging
{

public static void doLog(Locale l)
{
Locale.setDefault(l);

Logger logger = Logger.getLogger(TestLogging.class.getName());

final String msg = "Hello logging world";
logger.severe(msg);
logger.info(msg);
logger.config(msg);
logger.fine(msg);
logger.finer(msg);
logger.finest(msg);

}

public static void main(String args[])
{

doLog(Locale.ITALY);

// doLog(Locale.UK);

// doLog(Locale.FRANCE);

}
}

意大利语输出(使用默认记录器配置,因此仅记录严重级别和信息级别)

dic 15, 2014 10:48:43 AM com.stackoverflow.tests.logging.TestLogging doLog
Grave: Hello logging world
dic 15, 2014 10:48:43 AM com.stackoverflow.tests.logging.TestLogging doLog
Informazioni: Hello logging world

我想为日志记录级别设置自定义本地化消息,而不是默认提供的消息。

我该怎么做

  1. 直接使用 JDK 日志记录(我看到 Logger.getLogger 可以获取 ResourceBundle,但我没能让它工作,而且我也不知道这个文件中应该包含什么)<
  2. 使用 SLF4 facade(我猜这意味着调整 SLF4J 的 LoggerFactory.getLogger 函数,这是我用来获取记录器的函数)

最佳答案

根据一些测试,使用 JDK 日志记录似乎无法做到这一点。

传递给 Logger 的资源包名称不会影响创建本地化名称的 Level 对象。相反,它使用默认资源包 (sun.util.logging.resources.logging) 来获取关卡的文本版本。

我的测试由一个名为 logmessages.properties 的文件组成,其中包含:

INFO="NEWINFO"
testmessage="fooballs"

和一个简单的类:

import java.util.logging.Logger;

public class LocaleLoggingTest {

public static void main(String[] args) throws Exception {
Logger logger = Logger.getLogger("name", "logmessages");
logger.info("testmessage");
}
}

输出:

Dec 15, 2014 10:23:39 AM LocaleLoggingTest main
INFO: "fooballs"

如果你调试,当你到达 java.util.logging.SimpleFormatter.format(LogRecord) 时,日志记录有一个 Level 对象资源包。令人沮丧,是吗?

关于java - 使用 jdk logging/slf4j 更改日志记录级别本地化名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27481350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com