如何将登录集成到.net代码契约中
本文关键字:net 代码 契约 集成 登录 | 更新日期: 2023-09-27 18:11:45
我正在努力理解。net的代码契约。在使用代码契约时,如何记录导致相关方法失败的断言。例如,请看下面的代码:
Public IsMatch(string x, string, y)
{
Contract.Assert(!string.IsNullOrWhiteSpace(x));
Contract.Assert(!String.IsNullOrWhitespace(y));
return x == y;
}
设x = string.Empty
。这将导致该方法失败。如何记录断言导致上述方法失败的日志?我可以在一个大型应用程序中有许多这样的断言,如果知道哪个是麻烦制造者就好了。
使用代码契约时,如何记录导致相关方法失败的断言?
如果你说的是日志记录,我想你是指在运行时而不是静态验证。
断言失败时会引发异常。你可以写一个try/catch块来记录异常:
try
{
bool result = SomeClass.IsMatch(x, y);
}
catch(Exception e)
{
logger.Error(e.ToString()); // Use whatever logging mechanism here
throw; // Note: Make sure you rethrow if you catch "Exception e"
}
这将为您提供异常的堆栈跟踪,它将指向断言失败的行。
正如Polity所提到的,您还可以在每个断言上包含一个userMessage
参数。这样,除了堆栈跟踪之外,您的日志还将包含自定义错误消息。
如果你需要一个好的logger
类,看看NLog库。
查看:http://msdn.microsoft.com/en-us/library/system.diagnostics.contracts.contract.aspx
作为第二个参数,你可以指定一条消息
也就是说,合同。Assert非常原始。使用Contract可以更好地检查Post条件。需要,因为它是你的方法的需求。
编辑:Post条件当然应该是前置条件