Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 当需要日志记录时,你会考虑哪种设计模式?_Design Patterns_Logging - Fatal编程技术网

Design patterns 当需要日志记录时,你会考虑哪种设计模式?

Design patterns 当需要日志记录时,你会考虑哪种设计模式?,design-patterns,logging,Design Patterns,Logging,我正在处理的应用程序需要将操作、执行操作的用户以及操作时间记录到数据库中 哪种设计模式最受欢迎/适合于日志记录 我正在考虑需要当前用户和操作的命令模式。执行操作并写入日志 你觉得怎么样?还有其他的选择吗? 谢谢。我同意,我认为命令模式最合适,因为您将列出所有操作 但是我不认为你真的需要遵循这个特定于设计的模式。你可以简单地设置一个回调来更新日志。这取决于您的体系结构和技术,但在我看来,命令模式听起来有些过分。命令模式听起来不错。它特别使您能够将记录器传递给命令,并让命令在记录器上执行日志操作。通

我正在处理的应用程序需要将操作、执行操作的用户以及操作时间记录到数据库中

哪种设计模式最受欢迎/适合于日志记录

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

你觉得怎么样?还有其他的选择吗?
谢谢。

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


但是我不认为你真的需要遵循这个特定于设计的模式。你可以简单地设置一个回调来更新日志。这取决于您的体系结构和技术,但在我看来,命令模式听起来有些过分。

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


如果你有很多不同的操作,我不认为这是过分的,如果那只是数据库操作,你可以让数据库框架在每个数据库操作中执行操作,这可能是重新发明了一个单一的日志记录机制,但正如Margg指出的,这取决于你的体系结构

不要将命令与日志Memento混为一谈

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

日志条目本身可能是纪念品纪念品的摘要

记录器是一种工厂,它为记录的事件创建纪念品

与大多数情况一样,您有大量互锁的设计模式。哪一种“一”模式是“最流行/最合适的”不在其中

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

您可以使用它应用日志记录,而无需任何侵入行为。
AOP可能感觉像是代理模式和装饰模式的混合体。

观察者模式非常适合于日志框架。 您可以拥有扩展Observable的Logger类,以及诸如log to console、log to Database和log to File system等子类,每个子类都实现了Observable。 现在,无论何时记录日志消息,都将通知使用Logger类注册的所有观察者类,以便每个子类ex:log to console将消息记录到console。
Logger类也可以遵循单例模式,以确保Logger的单个实例在整个应用程序中可用。

谢谢,我曾想过使用简单的回调,但似乎很难从应用程序中获取“用户”,除非每个操作都将用户作为参数。供参考:“memento模式是一种软件设计模式,它提供了将对象恢复到其先前状态的能力”这句话……没有任何侵入行为……对我来说非常突出。应该发生在后台,而您的应用程序不应该依赖“何时”“日志将被写入。几年前我在这个案例中使用了这种模式。。。日志仍然工作得很好。