gpt4 book ai didi

c# - 如何将日志记录集成到 .NET 代码合约中

转载 作者:行者123 更新时间:2023-12-02 19:37:05 26 4
gpt4 key购买 nike

我正在尝试理解 .NET 的代码契约。使用代码契约时,如何记录导致相关方法失败的断言。例如,看一下这段代码:

  Public IsMatch(string x, string, y) 
{

Contract.Assert(!string.IsNullOrWhiteSpace(x));
Contract.Assert(!String.IsNullOrWhitespace(y));

return x == y;
}

假设x = string.Empty。这将导致该方法失败。如何记录断言导致上述方法失败。我可以在一个大型应用程序中拥有许多这样的断言,并且很高兴知道哪一个是麻烦制造者。

最佳答案

When using code contract, how do I log the assert causing the method in question to fail?

如果您谈论日志记录,我假设您指的是运行时而不是静态验证。

断言失败时会引发异常。您可以编写一个 try/catch block 来记录异常:

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"
}

这将为您提供异常的堆栈跟踪,该跟踪将指向断言失败的行。

正如 Poality 所提到的,您还可以在每个断言上包含一个 userMessage 参数。这样,除了堆栈跟踪之外,您的日志还将包含自定义错误消息。

如果您需要一个好的logger类,请查看the NLog library .

关于c# - 如何将日志记录集成到 .NET 代码合约中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com