相关疑难解决方法(0)

C#中的灵活日志界面设计

我想编写自己的Logging类(在C#中),它实现了一个标准接口,我可以从代码的任何部分调用它.

我的想法是让多个Log类实现Logger接口,每个类都用于其特定的日志目的地,例如,FileLogger将实现日志记录到文件,TextBox记录器将实现登录到Form中的多行TextBox,DBLogger将实现日志记录到数据库表等

此外,每个记录器类可以具有嵌套的记录器或链式记录器类,因此从应用程序代码单次调用Log()方法可以在多个目的地中记录消息; 示例在单个调用中记录到Form上的文件和文本框.

我面临的困难是:

通常我会记录一个正在运行的日志文件(其中包含调试所需的所有日志消息),一个审阅日志文件(其中只包含要由用户审阅的日志消息,或需要用户操作的日志消息),一个多线文本框屏幕(将复制所有日志消息以向用户提供进度指示),以及另一个多行文本框(将仅记录用户要查看的消息).

当我调用logger.Log(消息)时,某些消息可能不适用于特定的日志目标.例如,某些消息可能仅用于记录在正在运行的日志文件或进度文本框中,而不能记录在用户评论文本框中,反之亦然.

由于记录器将被链接以便单个函数调用可以登录到所有必需的目标,因此特定记录器如何识别日志消息不是针对它的,因此忽略日志消息?

我的示例日志界面是:

public interface Logger
{
    public void Log(string msg);
    public void Log(string msgType, string msg);
    public void InitLogSession();
    public void EndLogSession();
    public void AddLogger(Logger chainedLogger);
    public void RemoveLogger(Logger chainedLogger);
}

public class FileLogger : Logger
{
      //implement methods
}

public class TextBoxLogger : Logger
{
      //implement methods
}

public class DBLogger : Logger
{
      //implement methods
}
Run Code Online (Sandbox Code Playgroud)

编辑1:

更确切地说,可能有4个记录器:2个文件记录器和2个文本框记录器.假设一个特定的消息用于1个文本框记录器和1个文件记录器; 我的设计应如何处理?

编辑2:请不要建议现有的日志框架.我只是想自己写吧!

编辑3:好的.我有一个设计.请提供您的反馈,并填补空白.

修改后的界面:

public interface Logger
{
    public void Log(string msg);
    public …
Run Code Online (Sandbox Code Playgroud)

c# logging

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×1

logging ×1