【问题标题】:how to use logging component flexibility如何使用日志记录组件的灵活性
【发布时间】:2015-06-23 22:50:04
【问题描述】:

我的团队正在开发一个插件项目,其中主机应用程序协调插件工作(每个插件都有特定的功能,将在单独的线程上执行)。我正在编写主机应用程序并定义 IPlugin 接口;其他开发者将参考我的 IPlugin 界面并开发他的插件。
我的团队提出了一个问题:一些开发人员使用 Nlog 来记录他们的插件工作,但其他开发人员使用 Log4Net。
我的问题是:如何让每个插件都可以使用它喜欢使用的日志组件?
谢谢!

【问题讨论】:

    标签: c# logging plugin-architecture


    【解决方案1】:

    假设你做了一个接口:

    interface ILoggerPlugin
    {
        void Log(LogInfo info);
    }
    

    还有一堂课,让你了解所有信息

    class LogInfo
    {
        public string Application;
        public Exception LoggedException;
    }
    

    现在,如果您移交接口并要求所有开发人员遵循此操作,那么所有其他位都将被抽象。插件最终用户不必知道正在使用什么作为实现。天气它的 NLog 或 Log4Net。

    我们已经实现了非常类似的东西。最重要的是,我们还有一个目标变量,它指向数据库、文件和/或关键文件的电子邮件。

    【讨论】:

    • 我真的不明白你。你的意思是我需要创建一个接口(如上),然后其他插件开发人员将实现它,并且在我的主机应用程序中不需要关心日志引擎(Nlog 或 lognet)。
    • 你说的非常对。如果您创建一个接口并要求您的开发人员实现它,他们将必须遵守方法的签名。他们以后可以使用 nLog 或 log4net 来实现这些方法。现在,当最终用户使用插件时,他们将从您的界面中看到方法。
    • 您的方法有两个问题:(1)。如果我按照你说的那样做,在我的主机应用程序中,我必须同时引用 Nlog.dll 和 log4net.dll,然后如果另一个开发人员使用另一个日志引擎(例如:Xlog),我也必须引用 Xlog.dll; (2)。如果我按照问题 (1) 进行操作,插件无法控制其日志记录工作,所有日志记录工作都将在我的主机应用程序中设置。如果你有空闲时间,你可以创建一个解决方案(就像我上面的解决方案),你会看到这两个问题。
    • 您能否创建一个您所做的示例并将其放在 git 上。我会看看并帮助你
    • 非常感谢您的支持,您能否提供您的电子邮件地址,然后我可以将我的文件发送给您。其实我的项目很简单,发个word文档给你就够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 2010-10-31
    相关资源
    最近更新 更多