gpt4 book ai didi

c# - 如何在文件中记录异常?

转载 作者:可可西里 更新时间:2023-11-01 08:01:37 27 4
gpt4 key购买 nike

我希望能够在每个 catch block 中进行日志记录。像这样。

catch (Exception exception)
{
Logger.Write(exception);
}

然后配置中的设置将使用客户监听器获取 Message 和 StackTrace 属性等。

我想使用 Enterprise Library Logging Application Block。我敢肯定有人已经这样做了。

最佳答案

其他人已经发布了一些关于让日志应用程序 block (LAB) 工作的很好的链接,所以我不会在这里重复。

在格式化您的异常方面,您有 3 个我能想到的选择:

  1. 使用默认值 Exception.ToString()实现(还不错)
  2. 编写集成到 LAB 中的自定义格式化程序。
  3. 编写一个辅助函数来执行格式化并将字符串传递给 Write 方法。

如果选项 1 不能满足您的需求,那么我建议使用选项 3(因为选项 2 太过分了)。

一个简单的例子是这样的:

    catch (Exception exception)
{
Logger.Write(LogHelper.CreateExceptionString(exception));
}

...

public static string CreateExceptionString(Exception e)
{
StringBuilder sb = new StringBuilder();
CreateExceptionString(sb, e);

return sb.ToString();
}

private static void CreateExceptionString(
StringBuilder sb,
Exception e,
string indent = "")
{
if (indent.Length > 0)
{
sb.AppendFormat("{0}Inner ", indent);
}

sb.AppendFormat("Exception Found:\n{0}Type: {1}",
indent, e.GetType().FullName);
sb.AppendFormat("\n{0}Message: {1}",
indent, e.Message);
sb.AppendFormat("\n{0}Source: {1}",
indent, e.Source);
sb.AppendFormat("\n{0}Stacktrace: {1}",
indent, e.StackTrace);

if (e.InnerException != null)
{
sb.Append("\n");
CreateExceptionString(sb, e.InnerException, indent + " ");
}
}

关于c# - 如何在文件中记录异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2989401/

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