gpt4 book ai didi

design-patterns - 日志记录和配置系统 : Circular Dependency

转载 作者:行者123 更新时间:2023-12-04 06:57:16 24 4
gpt4 key购买 nike

假设一个典型的场景,应用程序的初始设置在启动时从配置文件加载。该应用程序还有一个记录器。记录器的参数(例如详细级别、日志文件路径等)理想情况下也存储在配置文件中。但是,配置加载器记录有关参数加载的信息也是可取的,例如

Attempting to load parameter LogVerbosity. Parameter is absent. Using the default value: 4.



因此,我们看到了两个组件之间的循环依赖。配置加载器需要一个随时可用的记录器,记录器需要配置参数来初始化自己。在我看来,这是一个足够典型的问题,可以对其进行规范的解决方案,但我找不到任何东西。

当然,可以推出一些临时解决方案,但我对最佳行业实践感兴趣。

希望这个问题是有道理的。

最佳答案

我假设您想记录参数以便以后能够调查它们,例如在出现错误的情况下。很明显,只有将它们保存在文件或其他存储中才有可能。这意味着记录器 必须正确配置才能这样做。所以基本问题是:

我们可以假设记录器至少能够记录启动参数吗?



这个案子是微不足道的。我只想:

  • 读取记录器的配置参数。
  • 初始化一个记录器。
  • 记录器的日志参数。
  • 读取其他参数。
  • 记录其他参数。



  • 这个案子比较复杂。我认为一个好的解决方案是为记录器使用一组默认的、硬编码的参数。它将保证可以安全地记录启动参数:
  • 使用默认(硬编码)参数初始化记录器。
  • 读取配置参数。
  • 日志参数。
  • 根据配置文件中的参数初始化记录器。
  • 再次尝试记录参数。

  • 如果记录器的配置正确,您将能够在标准日志位置找到所有参数。如果配置错误,您仍然可以在默认(硬编码)位置找到它们。

    或者,您可以使用标准机制(如 fstream)简单地将启动参数写入文件(在应用程序的工作目录中),而不是在步骤 1 中使用记录器。 ...

    补充意见

    可以配置一些日志库,如 nlog (throwExceptions = true),以在配置错误的情况下引发错误。然后,操作系统应记录未处理的异常。

    如果您使用此类日志库,您可以打开此选项并使用上面的解决方案 1。如果应用程序启动,那么您将在日志中找到启动参数。如果它没有启动,您应该检查系统日志。

    关于design-patterns - 日志记录和配置系统 : Circular Dependency,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35725211/

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