我找不到一种一致的方法来记录我的.NET Core微服务中的异常。信息性消息日志记录准则很简单(使用Microsoft.Extension.logging):
_logger.LogInformation($"Reading file {path}..."); // bad
_logger.LogInformation("Reading file {Path}...", path); // good
第二个变体的好处是结构化信息:通过使用巧妙的日志事件路由器(如带有RenderedCompactJsonFormatter的Serilog),路径被写为日志事件的单独属性。
随着错误日志记录,情况变得更糟。要求很明显:
throw new MyException("Failed to read file {Path}", path);
catch(MyException e)
{
_logger.LogError(e, "Processing error");
}
这里的LogError方法记录完整的错误描述,但它不是结构化的:路径不是作为属性添加的。我试图让MyException保存消息模板和参数,但这种方法存在2个问题:
请告诉我你是如何处理这件事的。
NET中的异常不支持这样的结构化参数。由于使用的是自定义异常,因此可以将此功能添加到自己的异常类中。
例如:
public class MyException : Exception
{
public object[] Props { get; }
public MyException()
{
}
public MyException(string message)
: base(message)
{
}
// Add custom "props" parameter to your exception class
public MyException(string message, params object[] props)
: base(message)
{
Props = props;
}
public MyException(string message, Exception inner)
: base(message, inner)
{
}
}
现在,在您的代码中,您可以执行以下操作:
try
{
var file = "image.png";
var path = "./my/path/";
throw new MyException("Failed to read file '{file}' in path '{path}'", file, path);
}
catch (MyException e)
{
_logger.LogError(e, e.Message, e.Props);
}
我认为这是捕捉异常并以结构化的方式记录异常的唯一方法。
我正在使用Azure函数中相对较新的ILogger(vs.TraceWriter)选项,并试图了解日志是如何捕获的。 以下是我的功能: 当我查看服务器日志时,LogFiles目录有一个层次结构。 结构化目录在这里什么也不包含,但在我的real function applications目录中似乎有各种“CodedDiagnostic”日志语句。 在这里我该期待什么?最终,我希望有一个单一的接收器,
给定以下代码,如何使用最新的JSDoc正确记录它? 我尝试过这个: 显然这不起作用,JSDoc留档提到的只是如何记录去结构化对象参数,而不是去结构化数组参数。
我有多个方法做基本相同的事情,接收一个对象,将字段传递给查询并返回结果。
.NET核心和ASP.NET核心到底有什么区别?
我用的是Spark 2.1。 我正在尝试使用 Spark 结构化流从 Kafka 读取记录,反序列化它们并在之后应用聚合。 我有以下代码: 我想要的是将字段反序列化到我的对象中,而不是转换为。 我有一个自定义的反序列化程序。 我如何在Java中做到这一点? 我找到的唯一相关链接是这个 https://databricks.com/blog/2017/04/26/processing-data-in
我注意到,虽然我在代码中设置了