当前位置: 首页 > 编程语言 > C#

C#日志设计:扩展方法,备选方案?分享

时间:2023-04-10 22:14:31 C#

C#日志设计:扩展方法,替代方案?我想编写一个可以轻松附加到当前项目中的任何类的记录器。对于开发,将消息记录到控制台会很方便,而在最终版本中我想记录到文件或其他东西。人们应该能够通过编辑几行代码或理想情况下的设置文件来改变行为。到目前为止我所拥有的是这种结构:publicinterfaceILogger{voidLogMessage(Stringmessage);//...其他日志记录函数(异常、时间等)在这里无关紧要};公共接口ILoggable{};publicstaticclassLoggingProvider{privatestaticILoggerlogger=ConsoleLogger.handle;publicstaticvoidLogMessage(thisILoggableobj,Stringmessage){logger.LogMessage(message);}}publicsealedclassNullLogger:ILogger{//什么都不做的记录器..};publicsealedclassFileLogger:ILogger{//写入文件的记录器..};公共密封类ConsoleLogger:ILogger{#region控制台分配[DllImport("kernel32.dll",SetLastError=true)]staticexternboolAllocConsole();[DllImport("kernel32.dll",SetLastError=true)]staticexternboolFreeConsole();#endregion#region单例实现privatestaticObjectcs=newObject();私有静态ILogger实例=null;私有ConsoleLogger(){AllocConsole();}~控制台日志ger(){FreeConsole();}publicstaticILoggerhandle{get{lock(cs){if(instance==null)instance=newConsoleLogger();}返回实例;}}#endregion#regionILoggerMemberpublicvoidLogMessage(stringmessage){lock(cs){StringlogString=getTimeString();logString+=("->t"+message);控制台.WriteLine(logString);}}#endregion#region辅助函数//...#endregion};现在,我可以拥有实现ILoggable的任何东西,并且通过扩展方法LogingProvider.LogMessage我可以在这些类中调用this.LogMessage("...")。如果是C++,我会直接使用私有继承。现在这个设计是好是坏?有什么我可以改进的吗?有没有一种方法可以在没有扩展方法的情况下为类提供日志记录功能,但又几乎没有变化?乍一看,您的设计似乎有点过度设计。在这个方法中:publicstaticvoidLogMessage(thisILoggableobj,Stringmessage){logger.LogMessage(message);ILoggableobj没有使用ILoggableobj。为什么需要它为什么不只是:publicstaticvoidLogMessage(Stringmessage){logger.LogMessage(message);}并称之为LoggingProvider.LogMessage(...)?另外,看看Log4Net,它是日志记录的行业标准实现。以上是C#学习教程:C#日志设计:扩展方法,备选方案?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: