小编Nik*_*ker的帖子

如何在 .NET Core 中使用结构化参数记录异常

我找不到一致的方法来记录 .NET Core 微服务中的异常。信息消息日志记录准则很简单(使用 Microsoft.Extension.Logging):

_logger.LogInformation($"Reading file {path}..."); // bad
_logger.LogInformation("Reading file {Path}...", path); // good
Run Code Online (Sandbox Code Playgroud)

第二种变体的好处是结构化信息:通过使用巧妙的日志事件路由器(例如带有 RenderedCompactJsonFormatter 的 Serilog),路径被写入日志事件的单独属性。

错误记录会让事情变得更糟。要求很明显:

  1. 错误作为异常来实现。
  2. 错误会记录在处理该错误的 catch 块中。
  3. 每个错误都以结构化形式记录。

所以,我希望错误报告看起来像

throw new MyException("Failed to read file {Path}", path);
Run Code Online (Sandbox Code Playgroud)

和错误记录 - 就像

catch(MyException e)
{
  _logger.LogError(e, "Processing error");
}
Run Code Online (Sandbox Code Playgroud)

这里的 LogError 方法记录了完整的错误描述,但它不是结构化的:路径没有添加为属性。我尝试让 MyException 保存消息模板和参数,但这种方法有两个问题:

  1. 如何基于带有命名参数的模板呈现异常消息?
  2. 当在 catch 块中处理异常时,可以处理参数。

请告诉我你是如何处理这个问题的。

.net c# logging exception structured-data

6
推荐指数
1
解决办法
4117
查看次数

将辅助扩展添加到 boost::filesystem::path 的正确方法是什么?

我想向路径附加附加扩展名:

namespace fs = boost::filesystem;
fs::path append_extension(const fs::path& path, const fs::path& ext);
Run Code Online (Sandbox Code Playgroud)

预期行为:

  • append_extension("foo.txt", ".log") -> "foo.txt.log"
  • append_extension("foo.txt", "log") -> "foo.txt.log"
  • append_extension("foo", "log") -> "foo.log"

append_extension是否可以在不使用点字符进行字符串操作的情况下实现?

c++ boost boost-filesystem

4
推荐指数
1
解决办法
3698
查看次数

标签 统计

.net ×1

boost ×1

boost-filesystem ×1

c# ×1

c++ ×1

exception ×1

logging ×1

structured-data ×1