【问题标题】:Logging Business Transactions记录业务交易
【发布时间】:2014-04-16 16:34:29
【问题描述】:

在一个遗留项目中,我发现了一个奇怪的日志记录解决方案。服务层中的所有类都具有获取日志的方法签名。在挖掘代码和大量对话后,我找到了原因。

我们需要为每个已处理的业务事务创建一个不同的日志文件。因此,如果一个新的业务事务启动,则会创建一个新的日志并将其放入每个调用的方法中。

这看起来很奇怪。

在我开始重写 Log.getLogger(..) 方法或其他方法之前。有谁知道将每笔业务交易记录在不同文件中的更好方法?

【问题讨论】:

  • 我将拥有一个日志文件并为每笔交易使用一个唯一的 ID。然后,您可以 grep 进行单个事务。您不需要为每个文件创建一个文件。尤其是因为这有使用大量资源的风险。
  • 不幸的是,每笔交易我都需要一个不同的日志文件。感谢您的 cmets。雾文件被发送给发起业务交易的客户。按照你的方式,我必须为日志文件构建一个解析器来提取这些消息。可能是一种选择。但我更喜欢使用记录器本身完成此操作的方式。
  • 我要做的是将输出写入发送到源的缓冲区。这将绕过对记录器或日志文件的需求。例如一个普通的Socket连接,你把结果写入socket。

标签: java logging transactions log4j apache-commons-logging


【解决方案1】:

您可以通过使用 log4j 库实现自定义附加程序来避免覆盖“Log.getLogger(...)”。由于遗留应用程序将事务记录在文件中,因此它应该使用附加程序(或者可能有人已经编写了自定义附加程序并且它正在您正在处理的应用程序中使用)。

在这种情况下,File Appender 是最适合您需求的 appender 类型,这可能是一个选项,您可以在此处找到“FileAppender”的文档:

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/FileAppender.html

这是扩展此类的问题,例如:

MyCustomTransactionAppender extends FileAppender

然后你只需要根据你的需要覆盖方法。

【讨论】:

    猜你喜欢
    • 2020-02-04
    • 1970-01-01
    • 2018-06-18
    • 2016-04-21
    • 2013-02-14
    • 2013-03-14
    • 2010-10-31
    • 2012-07-03
    • 2016-06-29
    相关资源
    最近更新 更多