log json with serilog
You have to configure your logger to use Json.JsonFormatter and just pass the object when logging info, Serilog will serialize the object.
Configuration
Log.Logger = new LoggerConfiguration() .WriteTo.RollingFile(new JsonFormatter(), Path.Combine(@"c:\log", "[filename]-{Date}.txt")) .CreateLogger()
I have used a in log4net
to send to Seq
. So, when emiting the message, I have added into the threadContext
a property for every JProperty
in the Json, at the first level only. Now in Seq, I can search by any of the json property. This is an example (take care that message variable should be a Json string before calling this methods).
private void AddProperties(string message) { var parsedObject = JObject.Parse(message); foreach (JProperty prop in parsedObject.Properties()) { AddProperty(prop); } } private void AddProperty(JProperty message) { log4net.ThreadContext.Properties[message.Name] = message.Value.ToString(); }