我有一个使用Serilog和JSNLog进行客户端日志记录的.NET Core项目 . 如果我将JSON对象从客户端传递到服务器并使用Serilog进行记录,则记录的JSON对象为空 .
very weird 就是这样,如果我附加了调试器,则JSON记录正常 .
例如:
调试时我得到:
[11:00:01 FTL] this works
[11:00:02 INF] Request finished in 342.1967ms 200 text/plain
[11:00:02 FTL] "testMessage": "this is an error"
[11:00:02 INF] Request finished in 374.7837ms 200 text/plain
当Crtl F5我得到:
[10:59:14 FTL] this works
[10:59:14 INF] Request finished in 253.3403ms 200 text/plain
[10:59:15 FTL] [[[]]]
[10:59:15 INF] Request finished in 267.2553ms 200 text/plain
我不确定问题是否与Serilog或JSNLog有关,但任何帮助都将不胜感激 .
我已经制作了一个非常简单的示例应用程序来复制它 . 使用默认的.NET Core Webapp
依赖关系如下所示:
在Startup.cs中:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
Log.Logger = new LoggerConfiguration()
.WriteTo.Console().CreateLogger();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddSerilog();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseJSNLog(new LoggingAdapter(loggerFactory));
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
而在我的前端:
<script src="~/lib/jsnlog.js/jsnlog.min.js"></script>
<script>
JL().fatal({ testMessage: "this is an error" });
JL().fatal("this works");
</script>
1 回答
我有一个类似的问题 . 我看了一下JSNLog,似乎问题是在从日志消息中对对象进行去主体化时正在创建的JSON .NET对象的日志记录 .
我做了以下解决方法:
我安装了Nuget包 Destructurama.JsonNet (
Install-Package Destructurama.JsonNet
)然后我更改了Logger配置以包含解构:
CustomLoggingAdapter
类,如下所示:并将日志更改为具有以下格式
{@logMessage}
注意:可以在JSONLog GitHub repo中找到LogMessageHelpers.DeserializeIfPossible
CustomLoggingAdapter
,如下所示:并出现日志消息 .
如果有帮助,请告诉我