我正在移动net4。8
应用程序到net50
,其中一部分工作是重构来自Microsoft的日志记录。企业图书馆
至ILogger
。我想将现有的结构化日志数据传递给ApplicationInsights。
称之为:
logger.LogInformation("My message called with {p1} and {p2}", p1, p2);
生成应用程序洞察数据,包括p1
和p2
-yay的自定义维度。
称之为:
logger.Log(LogLevel.Information,
new EventId(127, "CustomLog"),
new CustomLogEntry(),
null,
(entry, ex) => { return "Testing custom"; });
在哪里:
public class CustomLogEntry
{
public int Id { get; set; } = 128;
public string Name { get; set; } = Guid.NewGuid().ToString();
public DateTimeOffset Expiration { get; set; } = DateTimeOffset.UtcNow.AddDays(1);
}
不会在Application Insights中生成任何CustomLogEntry
属性。
所以CustomLogEntry
是ILogger的
接口。这只是一个模拟;我真正想利用的是微软的等价物。实践。企业图书馆。伐木。LogEntry.TState
参数。日志
我的下一步是设置自定义ITelemetryInitializer
,将CustomLogEntry
属性添加到我的ITelemetry
。
public class EventTelemetryInitializer : ITelemetryInitializer
{
public EventTelemetryInitializer()
{ }
public void Initialize(ITelemetry telemetry)
{
var trace = telemetry as TraceTelemetry;
if (trace == null) return;
trace.Properties.Add("Custom", "something");
}
}
当我调试在EventTelemetry初始化器。初始化
方法时,遥测
参数的任何部分似乎与ILogger的
(在本例中为TState
参数没有任何连接。日志CustomLogEntry
)。
我必须使用格式将自定义维度传递给Application Insights吗?例如,代替:
logger.Log(LogLevel.Information, new EventId(127, "CustomLog"), new CustomLogEntry(), null, (entry, ex) => { return "Testing custom"; });
使用:
var entry = new CustomLogEntry();
logger.LogInformation("Testing custom {Name}, {Expiration}, {Id}", entry.Name, entry.Expiration, entry.Id);
如果是这样,我倾向于发明一点扩展糖到ILogger
,但这感觉就像我把糖放在糖上,并且在从ILogger到Application Insight遥测的映射中缺少了一些东西。
当您使用独立包时,远程客户端不会注入到DI容器中,因此您需要创建一个新的远程客户端实例,并使用与记录器提供程序相同的配置,如下所示。这确保了相同的配置用于所有自定义遥测以及来自ILogger的遥测。
public class MyController : ApiController
{
// This TelemetryClient can be used to track additional telemetry using TrackXXX() api.
private readonly TelemetryClient _telemetryClient;
private readonly ILogger _logger;
public MyController(IOptions<TelemetryConfiguration> options, ILogger<MyController> logger)
{
_telemetryClient = new TelemetryClient(options.Value);
_logger = logger;
}
}
ApplicationInsightsLogger提供程序捕获ILogger日志并从中创建TraceTelemetry。如果将Exception对象传递给ILogger上的Log方法,则会创建ExceptionTelemetry而不是TraceTelemetry。这些遥测项目可以在与任何其他TraceTelemetry或ExceptionTeletry for Application Insights相同的位置找到,包括门户、分析或Visual Studio本地调试器。
如果希望始终发送TraceTelemetry,请使用以下代码段:
builder.AddApplicationInsights(
options => options.TrackExceptionsAsExceptionTelemetry = false);
您可以参考手动记录一些其他自定义遥测和使用Azure Application Insights记录自定义遥测
我希望我们的分布式事件日志记录具有适当的相关性。对于我们的Web应用程序来说,这似乎是自动的。应用程序服务API中的相关日志示例: 然而,对于我们的其他(非ASP,非WebApp)服务,如果我们使用的是Log4Net,而App Insights附加的日志是不相关的。我尝试了以下说明:https://docs.microsoft.com/en-us/azure/azure-monitor/app/c
问题内容: 标题应该很漂亮。 出于调试目的,我想表达为每个服务请求打印响应代码和正文。打印响应代码很容易,但是打印响应主体比较棘手,因为似乎响应主体不容易用作属性。 以下内容不起作用: 当然,我可以轻松地在发出请求的客户端上打印响应,但是我也希望在服务器端进行打印。 PS:如果有帮助,我的所有回复都是json,但希望有一个可以与一般回复配合使用的解决方案。 问题答案: 不确定这是否是最简单的解决方
有没有一种方法可以让fluentd船LivenessProbes输出像它对普通容器在吊舱中的输出一样?
努力更新中...
我正在使用设置为log level=INFO的wildfly21。在部署的代码中有许多记录器。调试语句。 例如 调试语句没有正确记录到文件中,因为日志记录级别设置为INFO。 我的问题是关于logger的性能成本。调试。 在代码中保留调试语句是否有任何性能代价。或者是文件I/O中的实际成本,因此,在需要时将调试语句留作故障排除之用并无害处。
下面的问题对很多人来说可能很愚蠢,因为它应该有一个简单的解决方案,但我是Spring框架的初学者,我一直在搜索和测试许多方法,但都没有成功。 因此,我需要实现基于Spring的Web服务的日志记录。Maven用于依赖项,带有依赖项,而不是整个starter web starter。 我尝试使用log4j,添加了一个依赖项和配置文件,它确实生成了一个日志文件,但只用于记录器本身的初始化,并且没有记录