我正在开发一个DLL,我想记录它生成的一些数据。
我想使用"Log4Net",但我发现在 DLL 中我没有可以编写 XML 代码的"App.config"文件,所以我不知道如何实现这一点(我是新手(。
我读过关于"单例"的文章,但我发现最好避免它,因为它有它的问题(即隐藏代码的一些可见性、单元测试的问题......
所以我的问题是:如何以及为我的 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绑定。
配置文件将在正在运行的模块中连接。 如果是控制台应用程序,它将位于exe
文件中, 或者在Web应用程序的情况下在web.config中。
若要在 DLL 中记录应用程序流, 只需创建一个创建和访问日志文本文件的类。
在该类中,声明对象LoggingClass loggingObject;
,然后使用此实例访问日志文件。
在为其创建对象时,您可以使用,
public static LoggingClass createOrGetObject()
{
return (loggingObject == null)? new LoggingClass() : loggingObject;
}
现在,只需调用此方法即可获取访问日志文件以写入日志的同一实例。 在此示例中,未使用 Log4Net,但可以正常工作。
你没有说你希望谁使用你的dll。
如果它将被许多其他人使用并且日志记录对他们有用,那么可能不希望被迫使用 log4net,或者如果他们想使用与您正在使用的不同版本的 log4net,这可能会导致问题。
我已经看到几个使用Common.Logging的dll来避免这个问题,它允许消费者使用他们想要的任何日志记录包。
话虽如此,请参阅在 dll 中配置 log4net 日志记录以获取另一种可能的解决方案。