哪种设计模式更适合记录?


10

我应该在程序中记录一些事件,但据我所知,最好将记录代码保留在程序之外,因为这与程序的实际功能无关。因此,您能否告诉我是否应该完全将其保留在代码之外,而仅使用观察者和侦听器记录事件?或者,我可以在需要记录某些内容的地方添加如下代码:

MyGloriousLogger.getXXXLogger().Log(LogPlace, new LogObject(z1, z2, z3, z4, ..., z99));

使用观察者设计模式是否会出错?我需要其他设计模式吗?还是我应该停止考虑设计模式?

PS1。如果我只想使用侦听器和观察者进行登录,则肯定需要添加和改进程序的观察者和侦听器。

PS2。我当然知道有许多用于登录Java的库,并且我正在使用java.utils.logging,但是我需要有一个包装器来记录我的特殊对象。


2
Java已经有17个日志记录框架和元日志记录框架(slf4j),可能还有一些元元日志记录框架,但是它们都不适合您吗?
凯文·克莱恩

Answers:


15

Logging通常以责任链模式实施。当然,您可以(而且我会)将其与Facade结合使用。我真的不会自己使用侦听器或观察者。

责任链-记录仪


这基本上是在说“用代码写入抽象记录器”吗?我想我的问题是:我应该从要记录的地方触发事件,并提供一个响应事件进行记录的侦听器,还是应该直接调用我的Logger服务(内部使用责任链),仅此而已?
Fire-Dragon-DoL

8

使用面向方面的编程,该方法使用After,Before和Around方法的建议。在这里,根据您的需要,您可以在api启动之前,之后或某些条件下添加日志,也可以将主代码与日志代码分开。


0

好吧,观察者听起来不适合我。另外,将记录器调用扔到“任何您需要的地方”将破坏您的代码并违反SRP。

例如,您可能对此感兴趣,因此可以通过方法注释附加记录器调用。


0

当您的输出可以在多个地方到达时,责任链似乎是一个很好的模式。在UML中,您有一个不同的记录器,一个指向控制台,另一个指向errorFile和第三个简单的信息记录器。

通常,我已经看到logLevels不同,但是日志文件是相同的。

我认为观察者模式对日志记录没有坏处,因为它会将您的日志记录代码与应用程序代码分离。这是一个好习惯,以这种方式轻松迁移到不同的日志记录机制。每次您要记录时,都会触发一个事件,并且适当的侦听器将接收该事件并将其记录下来。应该有一个包含所有寄存器列表的中间单例对象。

通过这种方式,我看到我们可以将日志记录代码与应用程序代码分离。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.