检查是否启用日志记录的最干净的方法是什么?
What's the cleanest way to check if logging is enabled?
我正在实施一个软件,用户可以在开始一项任务之前决定是否要为此任务创建一个日志文件。
- 如果启用日志记录,则会创建一个 csv 编写器
- 在整个代码中有几行使用 csv-writer 写入日志
- csv 编写器已处理
现在有三种方法可以检查是否启用了日志记录,我不喜欢其中任何一种:
- 每次创建或访问 csv-writer 时,在它之前放置一个 'if (isLogging)' 检查(大量调用)
- 创建一个csv-writer接口并调用该接口。创建另一个实现接口并具有空方法的 EmptyCsvWriter,并在 isLogging 为 false 时初始化这个(创建 'fake' 空对象似乎是错误的)
- 创建 csv 编写器并传递 isLogging。检查 csv-writer 是否在每次方法调用时都启用了 isLogging(为什么甚至首先创建 csv-writer 对象 - 似乎也是错误的)
第二个选项是最优雅的。它使所有代码更简单,更易于测试。
但是如果您需要计算 csv 编写器获取的输入,它的效率不如第一个:如果编写器丢弃它们,您将白白生成输出。另一方面,好处是即使您使用 noop 编写器,您也可以检测到此输入生成代码中的错误。
我正在实施一个软件,用户可以在开始一项任务之前决定是否要为此任务创建一个日志文件。
- 如果启用日志记录,则会创建一个 csv 编写器
- 在整个代码中有几行使用 csv-writer 写入日志
- csv 编写器已处理
现在有三种方法可以检查是否启用了日志记录,我不喜欢其中任何一种:
- 每次创建或访问 csv-writer 时,在它之前放置一个 'if (isLogging)' 检查(大量调用)
- 创建一个csv-writer接口并调用该接口。创建另一个实现接口并具有空方法的 EmptyCsvWriter,并在 isLogging 为 false 时初始化这个(创建 'fake' 空对象似乎是错误的)
- 创建 csv 编写器并传递 isLogging。检查 csv-writer 是否在每次方法调用时都启用了 isLogging(为什么甚至首先创建 csv-writer 对象 - 似乎也是错误的)
第二个选项是最优雅的。它使所有代码更简单,更易于测试。
但是如果您需要计算 csv 编写器获取的输入,它的效率不如第一个:如果编写器丢弃它们,您将白白生成输出。另一方面,好处是即使您使用 noop 编写器,您也可以检测到此输入生成代码中的错误。