在需要记录时,您会考虑哪种设计模式?

时间:2009-08-21 17:56:25

标签: design-patterns logging

我正在处理的应用程序需要记录操作,执行操作的用户以及对数据库的操作时间。

哪种设计模式最受欢迎/适合记录?

我正在考虑需要当前用户和操作的命令模式。执行操作并写入日志。

你怎么看?我可以考虑其他任何替代方案吗?

谢谢。

5 个答案:

答案 0 :(得分:10)

您可以使用AOP来应用日志记录而不会产生任何干扰行为。 AOP可能感觉像是Proxy和Decorator Pattern的混合。

答案 1 :(得分:4)

请勿混淆命令和记录 Memento

命令是完成的事情。其中可能包括所有命令的一些常见方面,包括编写日志条目。

日志条目本身可能是 Memento Memento 的摘要。

记录器是一种工厂,可为记录的事件创建 Mementos

与大多数事物一样,您有大量的互锁设计模式。哪种“一种”模式“最受欢迎/最合适”不会进入其中。

问题是“应该发生什么?”

答案 2 :(得分:4)

Observer Pattern非常适合日志记录框架。 您可以让Logger类扩展Observable,子类如log到console,登录到Database并登录到File system等,每个子类都实现Observer。 现在,只要记录了日志消息,就会通知所有使用Logger类注册的观察者类,以便每个Child类ex:log to console将消息记录到控制台。 此外,Logger类可以遵循Singleton模式,以确保在整个应用程序中可以使用单个Logger实例。

答案 3 :(得分:2)

我同意,我认为命令模式最适合您,因为您将列出所有操作。

但我认为你真的不需要遵循这个特定于设计的模式。你可以简单地设置回调更新日志的动作。这取决于你的架构和技术,但在我的脑海中,命令模式听起来有点矫枉过正。

答案 4 :(得分:1)

命令模式听起来不错。它特别允许您将记录器传递给命令,并让命令在记录器上执行日志操作。通过这种方式,您可以让每个操作都关注日志本身的格式,如果不记录某些操作或需要特殊信息,那么整体架构不需要了解它。 缺点是将操作耦合到记录器,如果要避免这种情况,可以为每个操作提供一个返回应添加的日志字符串的方法。

如果您将有许多不同的操作,我认为这不是过度杀伤,如果这只是数据库操作,并且您可以让数据库框架在每个数据库操作中执行操作,那么它可能会重新发明轮子记录机制,但正如marcgg指出这取决于你的架构。