我们都知道日志,好吧,但为什么我们应该考虑“记录器”类单身?如果我们将它作为正常的非 -singleton类会发生什么?为什么我们应该将“Logger”类作为单例考虑?
9
A
回答
13
我在IBM网站上找到了此处。它很好地解释了Logger Singleton类的用法。
真正的单身人士 的一个典型例子是日志记录服务。假设我们有一个基于事件的日志记录服务 :客户端 对象请求文本被记录日志 发送消息到记录 服务。通过监听这些日志记录请求的日志记录 服务和处理它们的 ,其他对象实际上在某处(控制台,文件, )记录了 文本。首先,请注意 日志服务通过经典 测试,作为一个单身:
- 请求者需要一个众所周知的对象,该对象将请求发送到 日志。这意味着访问的全局点为 。
- 由于日志记录服务是多个 听众可以注册的单个事件源,因此只有 需要是一个实例。
下面的链接:Use your singletons wisely
如果你不会使用一个单独的类,你将不得不处理这些不同的记录器之间的同步(写入文件,或者任何你使用流)实例。所以当你只有一个全局Logger实例时,它更容易。
0
取决于日志框架。通常你想要所有的消息都去一个日志,所以你想要所有的代码使用相同的记录器。但是记录器类并不一定是一个单独的东西来确保这一点。
2
主要问题是实际日志持续存在的位置。
如果您正在一个文件系统上编写,有多个实例(因此可能会有多个线程)可能会导致出现乱码文件。
从某种意义上说,根据缓冲和其他低级机制,来自一个写入的消息可能最终与来自其他消息的消息(或消息的一部分)混合在一起。
这可能是一个小问题,但它是我能想到的关于只有一个(因此是串行)日志写入对象的唯一的问题。
2
如果您有多个具有不同内容的日志流,则可以使用针对不同输出初始化的多个记录器类实例。
但是,如果您只有一个日志流,则具有多个日志记录类实例会导致更复杂的实现,因为实例必须一起工作来管理实际资源。例如考虑一个记录器,每个消息记录一个序列号。两个实例将不得不同步他们的序列计数器,这要求他们相互讨论,协商计数器增加等等。(在静态类成员中共享计数器的替代方案相当于具有单例记录器)
相关问题
- 1. 我们应该考虑将Flash作为最后的手段吗?
- 2. 何时以及为什么我应该考虑asp.net MVC?
- 3. Apriori算法的最终输出我们应该考虑什么
- 4. 选择SQL/NoSQL应该考虑什么?
- 5. 为企业创建报告框架时应该考虑什么?
- 6. 为什么我们应该阻止在iOS中创建单例实例,swift
- 7. 我们应该为自定义Web应用程序考虑哪些框架?
- 8. 图层有什么用处?我能做些什么来添加图层,为什么我应该考虑图层?
- 9. 我们应该什么时候考虑使用私人还是保护?
- 10. 什么时候应该考虑制作库标题?
- 11. 什么是VS我应该考虑的Resharper插件的列表?
- 12. 我应该什么时候开始考虑转向Python 3?
- 13. 在Windows 7上开发.NET之前,我应该考虑什么?
- 14. 何时以及为什么我们应该使用类System.ComponentModel.Container?
- 15. 为什么UITabBar会考虑Modal?
- 16. 为什么AutoConfigurationPackages不考虑@ComponentScan?
- 17. 我们应该什么时候将字符串更改为Stringbuilder?
- 18. 从一个单例类考虑继承
- 19. 为什么对象类方法将类的实例作为它们的参数
- 20. 为什么我应该创建View类的实例?
- 21. 在决定如何将回调传递给addEventListener时,我应该考虑什么?
- 22. 我应该使用什么窗口管理器作为示例?
- 23. 为什么我们需要将Object类作为所有类的基类?
- 24. 为什么区分方法时不考虑返回类型?
- 25. 为什么我的Imagemagick转换器不考虑循环参数?
- 26. 为什么remove()会考虑我的实体数组
- 27. 在创建用于torrent的asp.net应用程序时,我应该考虑什么?
- 28. 对于我的游戏的主循环我应该考虑什么:DispatcherTimer与StoryBoard
- 29. 我们正考虑将我们的网站移植到wordpress中