单例模式还是静态日志记录器?

3
我的当前C#应用程序是一个单一的可执行文件(EXE)和几个DLL(因此存在多个二进制文件),我想创建一个LOGGER(一些简单的自定义记录器,它可以写入到一个文本文件中,无论从何处调用-并且这应该在所有二进制文件(exe和dll)中都可用-请注意,这是一个单线程应用程序。
现在,我有一个DLL(Logger),它有一个类(Log),其中包含一个方法(trace)来记录日志,每个项目都会添加对此DLL(Logger)的引用,并创建自己的实例(传递文件名),然后调用.Trace(...)函数-效果很好...
但是,我不想创建许多不同的跟踪文件(每个项目至少一个),并且每次都要创建一个新的Logger实例似乎很重复...因此,我正在研究创建一个静态记录器类或使用单例模式...我只是不确定哪种方法是最好的以及为什么...
我希望有人可以指导我,如何才能创建一个记录器类(它将是自己的DLL),它将被许多项目(引用)使用,并且它们应该都写入同一个日志文件中...?
非常感谢任何帮助。谢谢。

请查看log4net http://logging.apache.org/log4net/ - Matthew
8
你不想使用log4net的原因是什么? - Keith Nicholas
如果你使用日志框架,那么你使用哪个? - Sergey Kalinichenko
+1 for log4net。这是一个已解决的问题,在这里没有理由重新发明轮子,除非你只是想学习一些东西。 - Eric Petroelje
有一个单独的EXE正在运行...我只想使用一些简单的记录器,所有大型记录器都有这些配置文件,对于这个简单的小程序来说,它只会变得更加头疼,而不是值得...更新...它真的应该全部在一个项目中...维护遗留代码的乐趣。 - JSchwartz
1
虽然我从未使用过log4net,但我也赞成使用已经存在的解决方案。何必重复造轮子呢?我经常使用企业库,并发现它的日志记录功能完全够用。除非你被禁止使用第三方dll,否则这是我会选择的路线。 - Justin
1个回答

4
你可以像以前一样在SingletonStatic记录器之间进行选择:你想能够覆盖方法(或使用Logging接口)吗?如果使用单例,你有机会重写方法来改变功能。你甚至可以将行为抽象到接口后面。
使用静态类,你现在和将来都与该类绑定在一起,任何更改都会影响所有人。
在处理自己的系统时,我已经转向了单例实例化对象。它提供了一种静态类不可用的灵活性水平。

1
如果您使用单例模式,您就有机会重写方法...但是请不要忽略单例模式和继承之间并不兼容的事实。 - cHao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接