gpt4 book ai didi

java - 在单元测试期间,如何将所有输出记录到控制台而不是日志文件

转载 作者:行者123 更新时间:2023-12-01 15:08:34 28 4
gpt4 key购买 nike

原标题:如何让 Apache LogFactory 始终返回相同的日志实现?

我有一个项目,使用了很多不同的记录器,配置为去不同的地方。当我运行单元测试时,我想用我自己实例化的 SimpleLogger 覆盖它们。如何将其设置到 LogFactory 中,以便始终返回它进行单元测试?

我真的不想处理外部配置文件。

作为一点背景知识,我发现记录器是出了名的不值得信任。确切地说,它并不是真正的记录器,而是有很多方法可以配置它并过滤输出 - 它可以从各种配置文件或代码中的任何位置完成,然后它可以发送到各个位置。记录器甚至可以根据配置将某种输出(错误)发送到与其他位置不同的位置。

尽管这可能非常出色和强大,但是当您花费 6 小时想知道为什么代码实际上被调用但输出被重定向时没有被调用时,一切都将被撤销。

运行测试时,我想尽可能确保看到所有输出,因此我想将所有日志重定向到控制台。 (所有这些,就像在我当前的项目中一样,可以创建分布在 6 个目录中的几十个不同的日志文件。)

最佳答案

我终于找到了一种方法来做到这一点。

您可以使用自己的工厂扩展 LogFactory - 重写两个 getInstance 方法以返回您的记录器(显然所有其他方法都可以为空)。我使用 SimpleLogger 将所有日志记录转移到控制台:

public Log getInstance(String name) throws LogConfigurationException {    // If this weren't just for testing I'd keep a map of these loggers instead...    SimpleLog consoleLogger=new SimpleLog(name);    consoleLogger.setLevel(SimpleLog.LOG_LEVEL_ALL);    return consoleLogger;}public Log getInstance(Class className) throws LogConfigurationException {    return getInstance(arg0.getName());}

然后在此类中使用静态方法安装它:

public static void initialize() {    System.setProperty(LogFactory.FACTORY_PROPERTY, MyLogFactory.class.getName());}

这将整个日志重新路由器限制为一个类,如果您在测试开始时调用initialize(),则 session 的所有日志输出都会重新路由到控制台。不要稍后调用它,否则您正在测试的代码可能已经调用了“普通”工厂并缓存了真正的记录器。

关于java - 在单元测试期间,如何将所有输出记录到控制台而不是日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12632097/

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