我已经更新了原来问题的内容,因为我开始在试图帮助我的人们中引起一些困惑。
我正在使用库“Microsoft.ApplicationInsights.AspNetCore”将日志发送到Azure。使用该库的挑战之一是,在为该库创建服务之前,它不会向 Azure 发送任何日志事件。
先有鸡还是先有蛋的情况是,我需要在 Net Core 6 Web 应用程序启动过程的最早阶段(即在 App Insights 需要运行的服务实际创建之前)写入日志并将其发送到 Azure。
我需要在应用程序启动过程的早期阶段写入日志的原因是捕获用户登录的详细信息,其中一旦 .Net Core 应用程序启动,就会弹出 Microsoft 登录页面。
在下面的代码示例中,您可以看到我创建了记录器工厂的实例,以便我可以在构建和启动其余服务之前在program.cs文件中本地写入一些日志。尽管使用此方法适用于写入控制台,但不会将任何事件发送到 App Insights。我认为这是因为在创建所需的服务(位于program.cs 文件的后期阶段)之前,应用程序见解库尚未建立。
var builder = WebApplication.CreateBuilder(args);
// I create an instance of logger factory
using var loggerFactory = LoggerFactory.Create(loggingBuilder => loggingBuilder
.SetMinimumLevel(LogLevel.Trace)
.AddConsole()
.AddApplicationInsights(builder.Configuration["APPINSIGHTS_CONNECTIONSTRING"]));
// I use the logger factory to create an instance of Ilogger
ILogger logger = loggerFactory.CreateLogger<Program>();
// This code section here is related to Microsoft Identity Web library and is responsible for
// triggering …Run Code Online (Sandbox Code Playgroud) 我正在努力寻找在 ASP.NET Core 2.2 中安装 Font Awesome 的任何最新安装指南
我已经尝试将手动文件导入到项目文件夹目录,然后尝试了 NuGet 包路由,但没有任何效果,因为我遵循的所有指南都参考了 2.2 中不存在的步骤和文件夹/文件
刚接触 ASP.NET Core 可能无济于事:(
在 Bootstrap 4 中,我使用以下示例代码来更新工具提示的标题(其中“statusIcon”是元素,在本例中是一个很棒的字体图标,但相同的原理也适用于按钮或其他任何内容:
$(statusIcon).attr('data-original-title', 'Check Error logs for details').tooltip();
Run Code Online (Sandbox Code Playgroud)
Razor 页面 html 元素:
<i class="fas fa-circle fa-lg" id="statusIcon:@item.Id" data-bs-toggle="tooltip" data-bs-placement="right" title="Started" data-bs-animation="false" style="font-size: 1.5em; color: #28A745"></i>
Run Code Online (Sandbox Code Playgroud)
阅读 Bootrap 5 的手册,他们似乎没有告诉我们如何使用 Vanilla JS 实现这一点
到目前为止我在 Javascript 中尝试过的:
var statusIconId = 'statusIcon:' + pluginId + '';
var statusIcon = document.getElementById(statusIconId);
document.getElementById(statusIconId).setAttribute("data-bs-original-title", 'Check Error logs for details');
Run Code Online (Sandbox Code Playgroud)
我在元素 Id 中使用变量,因为我正在使用 Razor 列表视图中的元素。
我今天遇到了 Serilog.Sinks.Map 插件,它将解决我将特定日志事件路由到特定接收器接口的挑战。在我的环境中,我正在写入日志文件并使用 SQL 接口。不过,我只想将某些日志写入 SQL Server。
阅读作者在 GitHub 上的说明,我只能在 Program.CS 中看到通过 C# 实现 LoggerConfiguration 的示例,但我正在使用 appsettings.json 文件,不确定如何从提供的示例更改为所需的 json 格式。
Serilog 在 GitHub 上给出的示例:
Log.Logger = new LoggerConfiguration()
.WriteTo.Map("Name", "Other", (name, wt) => wt.File($"./logs/log-{name}.txt"))
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
我当前的配置:请注意,我尚未在代码中实现 Sinks.Map。程序.CS文件:
public static void Main(string[] args)
{
// Build a configuration system with the route of the app settings.json file.
// this is becuase we dont yet have dependancy injection available, that comes later.
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
Log.Logger = new …Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用 SignalR .net 核心客户端和 JWT 令牌。
在下面的示例代码中,字符串变量“tokenString”已经被配置为一个实际的令牌,因此我不需要调用外部方法来创建令牌,这部分在我到达这个方法之前已经完成了。使用调试,并在 JWT 网站上测试“toeknString”值,我知道令牌正在工作,只是我不知道如何在 SignalR 连接方法中使用现成的令牌。
如何配置 SignalR 客户端连接以使用此 tokenString?
localConConnection = new HubConnectionBuilder()
.WithUrl("https://localhost:44372/LocalConnectorHub", options =>
{
options.AccessTokenProvider = () => Task.FromResult(tokenString); // Not working
// Need a solution like this: options.Token = tokenString
})
.WithAutomaticReconnect()
.Build();
Run Code Online (Sandbox Code Playgroud) 我必须创建自己的自定义水槽,因为当前可用的水槽都无法满足我的需求。
我遇到的问题是,当从发出方法中的 logEvent 消息中获取键/值对值时,该值用引号和反斜杠括起来。
我尝试将字典中的输出值转换为字符串,然后删除不需要的属性,但没有任何效果对我有用。
我的自定义接收器类中的方法:
public void Emit(LogEvent logEvent)
{
var properties = logEvent.Properties;
Serilog.Events.LogEventPropertyValue value;
if (properties.TryGetValue("logEventCategory", out value))
{
// Regex.Replace((value.ToString() ?? "").Replace("'", @"\'").Trim(), @"[\r\n]+", " "); // Not working
var notWorking = value.ToString();
var formattedValueNotWorking = value.ToString().Replace("\r\n", "\\r\\n");
}
}
Run Code Online (Sandbox Code Playgroud)
似乎任何尝试格式化键/值对 Value 的行为都会被忽略:您会看到示例字符串值 System 是用 \"System\" 包裹的,我想要的是实际的字符串,而不是反斜杠或引号缠绕在绳子上。
创建我自己的接收器是一项足够艰巨的任务,我只是想让事情变得简单,花了两天时间试图了解消息格式的更广泛的图片,但是使用自定义接收器,它变得过于复杂和臃肿的编码,无法满足我的需要。所有其他标准消息结构属性都呈现正常,例如消息/级别/时间戳等,它只是微调我需要的属性值的呈现,以便将这些值保存到我的数据库中自己的列中。
我目前正在我的 .NET Core 3.1 应用程序中测试 MS Graph .NET Core SDK 客户端。目的是提供我自己的本地 Web API 用户服务,该服务从 Azure B2C AD 执行更新/更改/获取用户。
在我的预期解决方案中,我将拥有各种 HTTP 客户端微服务,它们将向我的用户服务 SDK 客户端调用 API 命令,而不是直接使用 REST 调用 Azure Graph API。
在我的用户服务应用程序中,我尝试通过对发送到 Azure 的实际 SDK 命令使用存储库/接口方法来保持简洁。然后,这个相同的用户服务应用程序使用我自己的 WEB API 将数据返回到我的本地 HTTP 客户端。想象一下这个用户服务应用程序作为中间人的效果。
下图总结了环境:
这样做的目的是减少对图形服务使用的功能进行更改或添加时的工作,即在我自己的本地应用程序中提供一些通信标准化,并促进更好的关注点分离。此外,如果 MS 对 Graph API 进行更改,那么我只会更新用户服务应用程序,而不是在所有 HTTP 客户端应用程序中进行代码更改。希望这是有道理的。
无论如何,现在进入正题!我的问题的原因:
(请耐心等待,我是 REST 和使用接口的新手)
Graph SDK 客户端和 Azure 中的 Graph Service API 之间遇到的任何错误都将记录在我的用户服务应用程序中,即我将在第一时间捕获的大量 json 错误详细信息,但是我根本不需要通过此级别的详细信息返回到我所有本地调用 HTTP 客户端。
我想要实现的是一种识别/捕获 SDK 客户端和图形服务之间遇到的任何 HTTP 状态代码错误的方法,以及错误的一些基本详细信息,即简短描述,并且仅传递这些较低级别的错误将详细信息返回给我的本地 HTTP 客户端,即保持干净。
我正在努力了解如何在我的代码中执行此操作,特别是考虑到我同时使用接口使其变得更加复杂。MS 文档确实提供了有关使用图形服务的预期错误代码列表的信息,但没有示例解释如何处理此信息以便将相关(但较轻版本的信息)传递回另一个来源。
示例场景:
我读过这个问题的许多不同变体,我不敢相信我需要的解决方案是如此复杂,以至于需要使用额外的库和疯狂的技巧,希望不是!
在运行时,我的项目中的 LINQ 查询需要根据用户想要过滤的数据库表中的列数动态更改。在我的示例中,我首先展示了一个可工作的硬编码 LINQ 查询。下一个示例使用在运行时构建的列表,我需要弄清楚如何将字符串变量(whereClause)插入到 LINQ 查询中而不出现编译错误?
工作示例(硬编码)
logs = _context.Logs.Where(s => s.Level == LogLevel & s.LogEventCategory == EventCategory)
.Select(s => new Logs()
{
TimeStamp = s.TimeStamp,
Level = s.Level,
Exception = s.Exception,
LogEventCategory = s.LogEventCategory,
LogEventType = s.LogEventType,
LogEventSource = s.LogEventSource,
LogEventName = s.LogEventName,
LogUserName = s.LogUserName,
LogForename = s.LogForename,
LogSurname = s.LogSurname,
LogData = s.LogData
});
Run Code Online (Sandbox Code Playgroud)
示例二 - 我想要修复和使用的解决方案......
首先创建一个列表,每次运行新查询时列表的内容都会更改,通过父 OnGet 方法作为变量传递的字符串将包含一个值并在字符串连接中使用,或者将为 null,因此不会添加到列表并在串联中使用。
第二个例子是我遇到编译错误的地方。
var filtersList = new List<string>();
if (LogLevel != null)
{
filtersList.Add("s.LogLevel == LogLevel"); …Run Code Online (Sandbox Code Playgroud) c# ×5
asp.net-core ×2
serilog ×2
.net-5 ×1
.net-core ×1
appsettings ×1
bootstrap-5 ×1
dictionary ×1
ilogger ×1
javascript ×1
json ×1
jwt-auth ×1
linq ×1
logging ×1