【问题标题】:Custom Logging mechanism: Master Operation with n-Operation Details or Child operations自定义日志记录机制:具有 n 操作详细信息或子操作的主操作
【发布时间】:2012-03-20 12:16:45
【问题描述】:

我正在尝试在服务工作流混合应用程序中实现日志记录机制。日志记录的要求是,对于独立的日志操作,每个日志都必须被视为一个详细操作,并针对父/主操作放置。所以,它是一个父子,并进入数据库表。这是主要原因,NLog 失败。

为了帮助更好地理解,我将深入介绍一般细节。应用程序流程是这样的:

现在,应用程序(通常称为 Program.cs)的主入口点是 Platform。它初始化一个引擎,该引擎能够侦听来自 ISDN 线路、VoIP 或 Web 服务的传入呼叫。该接口是通用接口,因此任何到达 Platform 的调用都会触发 OnConnecting()OnConnecting() 是一个线程安全事件,可以根据系统需要多次触发。

OnConnecting()中,我们的自定义工作流管理器的一个新实例被启动,上下文是一个名为ProcessingInfo的自定义对象:

new WorkflowManager<ZeProcessingInfo>();

在哪里,ZeProcessingInfo:

var ZeProcessingInfo = new ProcessingInfo(this, new LogMaster());

如您所见,ProcessingInfoPlatform 本身和一个新的LogMaster 实例组成。 LogMaster 是在一个独立的程序集中定义的。

现在,这个 LogMaster 在整个 WorkflowManager、它启动的所有工作流、任何正在运行的Workflow 中的所有活动都可用,并传递到从任何 Activity 中调用的外部代码。现在,当初始化一个新的 LogMaster 时,会在数据库中创建一个 Master Operation 条目,并且这个 LogMaster 对象现在一直存在,直到此调用结束在经历了一系列非常严肃的过山车之后,经历了不同的工作流程。在每次调用 OnConnecting() 时,都会创建并维护一个新的主操作。

LogMaster 允许调用 AddDetail() 方法,在内部存储的主操作(通过 Guid 主键区分)下添加新的子细节。 LogMaster 建立在实体框架之上。

而且,我可以根据需要多次登录同一个主操作。但是应用程序的需求正在发生变化,现在需要从其他程序集中进行日志记录。 Platform Server 程序集是一个 Windows 服务,它充当服务器侦听基于 Web 服务的调用,一旦客户端调用方法,OnConnectingPlatform 被触发。

我需要一种机制来以某种方式检索相关的 LogMaster 对象,以便我可以向同一个主操作添加详细信息。但是Platform Server是一次触发Platform上的OnConnecting(),从而实例化LogMaster。这会产生冗余循环。

此外,还考虑了故障情况。如果 LogMaster 失败,需要从 Database Logging 恢复到 Event Logging。如果 Event Logging 失败(或通过统一配置不允许),则需要恢复为基于文件 (XML) 的日志记录。

我希望我给出了一个粗略的想法。我不期望代码,但我需要一些策略来实现非常无缝的可插入可配置日志记录机制,该机制支持主子操作。

感谢阅读。任何帮助将不胜感激。

【问题讨论】:

    标签: c#-4.0 logging workflow-foundation-4 entity-framework-4.3


    【解决方案1】:

    我已多次阅读此问题,但很难弄清楚发生了什么。我认为您的图表根本没有帮助。如果您的问题是关于在编写子日志记录时尝试检索主日志记录,那么我会忘记尝试在日志表中创建规范化数据。在尝试这样做时,您只会减慢事务系统的速度。您希望日志/审计记录尽可能快地写入,并且您可以稍后在需要读取它们时聚合它们。

    为日志条目创建一个非规范化表,并使用该表中的单个 Guid 来跟踪会话/父日志主控。是的,这将是一张大桌子,但它会写得很快。

    至于保证将日志消息传递到目的地,我会尽量不要创建多个目的地,因为稍后将它们组合起来将是一场噩梦,而是使用 MSMQ 之类的东西尽快发出审计日志并选择另一个服务以有保证的交付方式处理它们。 ETW(事件记录)在负载下无法保证,您不会知道它已失败。

    【讨论】:

    • 我认为您确实理解了,因为您的答案已经针对我后来关注的问题,例如最佳机制和性能。
    • 另外,整个工作流程的日志记录是可以的。我需要使用大约 20 个控制台应用程序、15 个网站、14 个 WCF 等来登录解决方案的其余部分......
    • 我使用的是 log4net。需要 Master-Detail 类型的日志记录,因此转向自定义解决方案。 log4net 和 nlog 需要太多 app.config 配置,我需要手动管理配置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2011-01-25
    相关资源
    最近更新 更多