我有一个使用Serilog和JSNLog进行客户端日志记录的JSNLog核心项目。如果我将一个JSON对象从客户机传递到服务器,并使用Serilog对其进行记录,则日志记录的JSON对象是空的。
非常奇怪的问题是,如果我附加了调试器,那么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核心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>发布于 2018-01-24 22:43:14
我也有过类似的问题。我看了一下JSNLog,问题似乎是在从日志消息中对对象进行反序列化时创建的JSNLog对象的日志记录。
我做了以下解决办法:
Install-Package Destructurama.JsonNet)CustomLoggingAdapter类,如下所示:
公共类_loggerFactory.CreateLogger(finalLogData.FinalLogger);CustomLoggingAdapter: ILoggingAdapter {私有ILoggerFactory _loggerFactory;public CustomLoggingAdapter(ILoggerFactory loggerFactory) { _loggerFactory = loggerFactory;} public void (FinalLogData finalLogData) { ILogger logger = LogMessageHelpers.DeserializeIfPossible(finalLogData.FinalMessage);Object message =LogMessageHelpers.DeserializeIfPossible(finalLogData.FinalMessage);switch (finalLogData.FinalLevel) { case Level.TRACE: logger.LogTrace("{@logMessage}",message);Level.DEBUG: logger.LogDebug("{@logMessage}",message);Level.INFO: logger.LogInformation("{@logMessage}",message);logger.LogInformation;case Level.WARN: logger.LogWarning(“{@logMessage},message”);logger.LogWarning;case Level.ERROR: logger.LogError("{@logMessage}",message);案例Level.FATAL: logger.LogCritical("{@logMessage}",消息);断开;}
并将日志更改为具有以下格式的{@logMessage}注意: LogMessageHelpers.DeserializeIfPossible可以在JSONLog GitHub回购中找到。
CustomLoggingAdapter,如下所示:
App.UseJSNLog(新CustomLoggingAdapter(loggerFactory),jsnlogConfiguration);日志信息出现了。
如果这有帮助,请告诉我。
https://stackoverflow.com/questions/45738682
复制相似问题