[英]How to force camel case in C# .NET structured logging?
有誰知道如何將 .NET Core C# 中結構化日志的行為/格式更改為駝峰式(例如:駝峰式)? 我正在嘗試利用結構化日志記錄,如下所示:
Logger.LogInformation("Some text here. My object: {@some_class}", someClass);
假設某個類如下所示:
class SomeClass {
[JsonProperty(PropertyName = "intField")] // this does NOT work for structured logging
int IntField {get;set;}
string StrField {get;set;}
}
為簡潔起見,我將收到如下輸出:
{
...
"message": "Some text here. My object: {\"IntField\":5,\"StrField\":\"I'm here\"}",
"some_class": {
"IntField":5,
"StrField":"I'm here"
},
...
}
但我想要的是所有字段都是駝峰式的,就像日志中的所有父字段一樣。 以下是期望的結果:
{
...
"message": "Some text here. My object: {\"IntField\":5,\"StrField\":\"I'm here\"}",
"some_class": {
"intField":5,
"strField":"I'm here"
},
...
}
我已經嘗試使用新的 JsonSerializerSettings 對象設置我的 JsonConvert.DefaultSettings 以強制使用駝峰式大小寫,但我假設這僅在我實際序列化為字符串時才有效( 從 StackOverflow 問題中得到)。 我猜測記錄器不會在引擎蓋下使用。
如果對我有幫助,我正在使用 .NET Core 2.2 和 v4.8.1。
1) 使用CamelCaseNamingStrategy
作為 NamingStrategy 配置創建自定義序列化程序。
internal class JsonNetSerializer : NLog.IJsonConverter
{
private readonly DefaultContractResolver contractResolver;
public JsonNetSerializer()
{
contractResolver = new DefaultContractResolver
{
// KEY CONFIG !!!
NamingStrategy = new CamelCaseNamingStrategy()
};
}
/// <summary>Serialization of an object into JSON format.</summary>
/// <param name="value">The object to serialize to JSON.</param>
/// <param name="builder">Output destination.</param>
/// <returns>Serialize succeeded (true/false)</returns>
public bool SerializeObject(object value, StringBuilder builder)
{
try
{
string json = JsonConvert.SerializeObject(value, new JsonSerializerSettings
{
ContractResolver = contractResolver
});
builder.Append(json);
}
catch (Exception e)
{
NLog.Common.InternalLogger.Error(e, "Error when custom JSON serialization");
return false;
}
return true;
}
}
}
2)更改新自定義的默認值
var customConverter = new JsonNetSerializer();
ConfigurationItemFactory.Default.JsonConverter = customConverter;
使用它,將你的 Json 發送到 NLog log.Info("Metadata: {@source}", metadata);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.