我找不到一致的方法来记录 .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),路径被写入日志事件的单独属性。
错误记录会让事情变得更糟。要求很明显:
所以,我希望错误报告看起来像
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 保存消息模板和参数,但这种方法有两个问题:
请告诉我你是如何处理这个问题的。
我想向路径附加附加扩展名:
namespace fs = boost::filesystem;
fs::path append_extension(const fs::path& path, const fs::path& ext);
Run Code Online (Sandbox Code Playgroud)
预期行为:
append_extension是否可以在不使用点字符进行字符串操作的情况下实现?