Another x-plat CLI option is Piggy - https://github.com/datalust/piggy - a side-project still early days of development, but may be interesting for the lack of (e.g. JVM) dependencies. It's a self-contained binary for Win/Mac/Linux.
DbUp, upon which Piggy is based, is a popular option in the .NET space: https://dbup.github.io/.
(Neither attempt the protections that I think strong_migrations is offering - TIL!)
If these
https://github.com/serilog/serilog-settings-configuration/bl...https://github.com/serilog/serilog-settings-appsettings/blob...
are more or less what can be done, than yes, comparing to NLog configuration possibilities Serilog is very weak. I do not position myself as NLog expert, but I had time to learn it and use in complex scenarios, so just opened NLog.config of one of my project and here is what I use. The following is not NLog vs Serilog comparison, it is very brief "what I use in NLog" vs "what I did not find in serilog by just viewing files in browser".
So, I want everything to be configured from config file and changed after program is compiled.
* Asynchronous wrapper for any log target with some parameters to tune if necessary.
* Colorful output to console (separately to stdout and stderr). I can specify colors based on event properties using condition attribute. Using conditions applies to other log targets and other scenarios.
* For file target I can specify various log archiving option, based on date, counter, rolling counter, etc. Paths can include references to special folders, process IDs, thread IDs, event event properties, etc., not only environment variables.
* Did not find any concept of rules NLog has. I want to be able to freely map event parameters (name, level) to targets.
Again, I have no experience with Serilog, so I expect myself to be wrong and least partially.
Thanks for the reply! NLog's configuration story is certainly impressive; I think the differences in approach make them hard to compare directly on some of these however (for example, most sinks based on network I/O do asynchronous batching by default in Serilog).
Great post. So the follow-up question is, how much work would be involved in mirroring all that in a native UTF-8 encoded string type? :-)
Windows interop, and 8/16 conversions, would obviously be an expense, but ~half the storage requirements of UTF-16 have to represent a substantial CPU/RAM saving.
Ah yes, my bad - the "value types go on the stack" simplification is a bit sloppy. It's a useful way to describe it to make the comparison - but definitely not for understanding C# in this case.
DbUp, upon which Piggy is based, is a popular option in the .NET space: https://dbup.github.io/.
(Neither attempt the protections that I think strong_migrations is offering - TIL!)