C#如何在DLL里面记录文件?

问题描述 投票:0回答:1

我正在开发一个DLL,我想记录它所产生的一些数据,我想使用 "Log4Net",但我发现一个问题,在DLL中我没有 "App.config "文件,在那里我可以写XML代码。

我想使用 "Log4Net",但我发现一个问题,在DLL中我没有一个 "App.config "文件,在那里我可以写XML代码,所以我不知道如何实现这一点(我是这方面的新手)。

我读过关于 "Singleton "的文章,但我看到最好避免使用它,因为它有它的问题(即隐藏一些代码的可见性,单元测试的问题,...)。

所以我的问题是:如何为我的DLL生成的数据创建一个日志文件,最好的方法是什么?

c# logging dll singleton log4net
1个回答
1
投票

DLL--一个类库--本身就不应该有日志记录。即使是那些为了输出而存在的--比如包含Console甚至logger代码的--也不应该决定自己写日志文件。日志工作--所有的输出工作--如果使用你的DLL的程序员无法控制甚至完全控制,那就只能是令人烦恼的行为。而你永远不应该写一些带有Vexing行为的东西。

记录是使用你的代码的人的工作。而不是你的代码。如果你正在编写一个库或者其他任何通常没有输出的东西(比如Windows服务),通常会有一个封装项目用于调试和测试。

如果它足够重要,它就会警告一个Exception。如果它不够重要,就会发出Exception--它可能根本就不够重要。要写出好的Exception处理,更不用说好的Exception抛出代码了,这是一个令人生畏的挑战。但是有两篇文章是我经常链接的。而且我真的认为会帮助你走上正确的道路。

他们真的帮我搞定了。而且到目前为止,他们还帮助了无数人。而且他们的想法甚至不只与.NET挂钩。


0
投票

配置文件将被连接在运行模块中,它将在 exe 文件中,如果是控制台应用程序,则在web.config中,如果是web应用程序。


0
投票

要在DLL中记录应用流程,只需创建一个类来创建和访问日志文本文件。

在该类中,声明对象 LoggingClass loggingObject; 然后使用这个实例来访问日志文件。

在为它创建对象时,你可以使用。

public static LoggingClass createOrGetObject()
{
  return (loggingObject == null)? new LoggingClass() : loggingObject;
}

现在,只需你可以调用这个方法来获取访问日志文件的同一个实例来写日志。在这个例子中,Log4Net没有被使用,但可以很好地用于日志记录。


0
投票

你没有说你希望谁使用你的dll。

如果它将被很多其他人使用,而且如果日志记录对他们有用,那么可能不希望被迫使用log4net,或者如果他们想使用与你使用的log4net不同的版本,这可能会导致问题。

我见过一些使用 通用.记录 以避免这个问题,这使得消费者可以使用任何他们想要的日志包。

说到这里,请看 在dll中配置log4net日志记录。 另一种可能的解决办法。

© www.soinside.com 2019 - 2024. All rights reserved.