c# - C#如何在DLL中记录文件?
问题描述
我正在开发一个 DLL,我想记录它生成的一些数据。
我想使用“Log4Net”,但我发现在 DLL 中我没有可以编写 XML 代码的“App.config”文件的问题,所以我不知道如何实现这个(我我在这件事上是新的)。
我读到了“Singleton”,但我发现最好避免它,因为它有问题(即隐藏代码的一些可见性,单元测试的问题......)。
所以我的问题是:如何以及为我的 DLL 生成的数据创建日志文件的最佳方法是什么?
解决方案
DLL - 一个类库 - 永远不应该自己记录。即使是那些用于输出的——比如包含控制台甚至记录器代码的——也不应该决定编写自己的日志文件。记录工作 - 所有输出工作 - 无法由程序员使用您的 DLL 控制甚至完全控制,这将是令人烦恼的行为。而且你永远不应该写一些带有恼人行为的东西。
记录是使用您的代码的人的工作,而不是您的代码。如果您正在编写库或其他任何通常没有输出的东西(如 Windows 服务),通常会有一个用于调试和测试的包装器项目。
如果它足够重要,它需要一个例外。如果它对于异常来说不够重要 - 它可能根本不够重要。编写好的异常处理是一项艰巨的挑战,更不用说好的抛出异常的代码了。但是有两篇关于我经常链接的文章。我真的认为会帮助你走上正确的道路:
- https://blogs.msdn.microsoft.com/ericlippert/2008/09/10/vexing-exceptions/
- https://www.codeproject.com/Articles/9538/Exception-Handling-Best-Practices-in-NET
他们真的帮助我解决了这个问题。到目前为止,他们帮助了无数其他人。他们的想法甚至不仅仅与 .NET 相关联。
推荐阅读
- python - 我的程序如何为不可用的值返回 none,例如某些电影没有 metascore
- node.js - react-scripts 启动错误代码 134,未启动应用程序
- flutter - 控制不会在颤动中进入循环
- r - 在R中的一个df中为多个文件的文件名添加日期
- syntax - SML 是否支持对匹配表达式中的模式进行保护?
- c++ - 使用 std::variant 而不是编译时错误在缺少函数重载时引发异常
- apache - 具有多个基于名称的虚拟主机的 2 个 Apache Web 服务器的负载平衡/高可用性
- python - 检查所有字典是否包含具有特定值的特定键
- go - 如何在 Go 中创建 HTTP 会话
- cmd - 有人可以解释一下为什么 cmd 的 'where' 找不到这个文件吗?