|
| 1 | +using log4net; |
| 2 | +using log4net.Appender; |
| 3 | +using log4net.Config; |
| 4 | +using log4net.Core; |
| 5 | +using log4net.Layout; |
| 6 | +using log4net.Repository.Hierarchy; |
| 7 | + |
| 8 | +namespace Matrix.Logging.Benchmarks; |
| 9 | + |
| 10 | +public partial class FileAppend |
| 11 | +{ |
| 12 | + private string _log4NetPath = null!; |
| 13 | + private string _log4NetRepository = null!; |
| 14 | + private FileAppender _log4NetAppender = null!; |
| 15 | + private ILog _log4NetLogger = null!; |
| 16 | + |
| 17 | + [GlobalSetup(Target = nameof(Log4Net))] |
| 18 | + public void SetupLog4Net() |
| 19 | + { |
| 20 | + _log4NetPath = CreateFilePath(LibraryCatalog.Log4Net); |
| 21 | + _log4NetRepository = $"{LoggingData.Category}.{Guid.NewGuid():N}"; |
| 22 | + var repository = (Hierarchy)LogManager.CreateRepository(_log4NetRepository); |
| 23 | + _log4NetAppender = new FileAppender |
| 24 | + { |
| 25 | + File = _log4NetPath, |
| 26 | + AppendToFile = true, |
| 27 | + ImmediateFlush = false, |
| 28 | + Layout = new PatternLayout(LoggingData.Log4NetFileLayout) |
| 29 | + }; |
| 30 | + _log4NetAppender.ActivateOptions(); |
| 31 | + BasicConfigurator.Configure(repository, _log4NetAppender); |
| 32 | + repository.Root.Level = Level.Info; |
| 33 | + repository.Configured = true; |
| 34 | + _log4NetLogger = LogManager.GetLogger(_log4NetRepository, LoggingData.Category); |
| 35 | + } |
| 36 | + |
| 37 | + [GlobalCleanup(Target = nameof(Log4Net))] |
| 38 | + public void CleanupLog4Net() |
| 39 | + { |
| 40 | + _log4NetAppender.Close(); |
| 41 | + LogManager.ShutdownRepository(_log4NetRepository); |
| 42 | + Verify(LibraryCatalog.Log4Net, _log4NetPath); |
| 43 | + } |
| 44 | + |
| 45 | + [Benchmark] |
| 46 | + [LibraryBenchmark(LibraryCatalog.Log4Net)] |
| 47 | + public void Log4Net() => _log4NetLogger.Info(LoggingData.FileMessage); |
| 48 | +} |
0 commit comments