| Practice | Recommendation | |----------|----------------| | Check log level | Always wrap log.Debug() in if (log.IsDebugEnabled) to avoid parameter evaluation overhead | | Async logging | Not built-in – use a separate ForwardingAppender or background queue manually | | PatternLayout | Use %message only where possible; avoid expensive lookups like %method or %stacktrace | | FileAppender | Use MinimalLock model for shared logs, but expect lower throughput | | AdoNetAppender | Enable connection pooling; batch inserts using custom logic |
private static readonly ILog log = LogManager.GetLogger(typeof(OrderService)); log4net 1.2.10.0