Logging system should not be able to significantly impact application health or performance.
Guarantees section covers this topic in greater detail.
Configuration is done in code.
Configuring and composing loggers in code is preferable to clumsy XML files. See Configuration section for an in-depth discussion.
Extensibility is valued.
The libraries are designed in a way that encourages creating custom implementations of logs and decorators.
Performance is of essence.
Implementations go to great lengths to provide a throughput level sufficient for applications handling tens or even hundreds of thousands of requests per second.
Log events contain key-value properties which are later used for querying the log data or rendering it to text.
Most log implementations require just one line of code to set up (see Quickstart).
Enrichment of log events with custom properties
Log events can be dynamically enriched with new properties either specified by user or provided from ambient context.