我想编写自己的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)