Asp.net core Logging LoggerFactory class'ı Giriş.
Tags: dotnet, csharp
Published: 2021-10-10 17:07:30

## LoggerFactory class'ı ne işe yarar ?

LoggerFactory class'ı asp.net core projemizde yeni bir ILogger instance'ı üretmemize olanak sağlar.

Örnek : 

1.) Logger adlı bir klasör oluşturun ve içerisine Logger ve LoggerFileProvide adlı iki tane class oluşturun : 

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e6nl3s8kb6p7oyygnjkd.png)
 
2.) Logger class'ımızı ILogger adlı interface'den türetin ve içine şu kodları yapıştırın : 

```
        public string Path { get; set; }
        public Logger(string FullPath)
        {
            Path = FullPath;
        }
        public IDisposable BeginScope<TState>(TState state)
        {
            return null;
        }

        public bool IsEnabled(LogLevel logLevel)
        {
            return true;
        }

        public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
        {
            File.AppendAllText($"{Path}",$"LogLevel: { logLevel } | EventId: { eventId }|  TState : { state } | Exception : { exception } | Formatter : { formatter } + Datetime :  {DateTime.Now} "+ Environment.NewLine + Environment.NewLine);

        }

```

3.) LoggerFileProvide class'ımızı "ILoggerProvider" adlı interfaceden türetin ve içine aşağıdaki kodları yapıştırın : 

```
        public string Path { get; set; }
        public LoggerFileProvider(string FullPath)
        {
            Path = FullPath;
        }
        public ILogger CreateLogger(string categoryName)
        {
             return new Logger(Path);
        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }
```

4.) HomeController.cs ye gidelim ve ILogger tipinden yeni bir field oluşturalım örneğin aşağıdaki gibi : 

```
private readonly ILogger _logger2;

```

5.) HomeController.cs controllerının constructor'ına aşağıdaki kodları yapıştıralım : 

```
 _logger2 = LoggerFactory.Create(configure =>
              {
                  configure.AddProvider(new LoggerFileProvider("C:\\Loglama\\Logging.txt"));
              }).CreateLogger("Bu farklı bir logger.");
```

6.) HomeController.cs dosyasının içerisindeki Index action'ın içine aşağıdaki kodları yapıştıralım : 
```
            _logger.LogInformation("Bu bir mesajdır ve console yazılacaktır.");
            _logger2.LogInformation("Bu bir mesajdır ve C:\\Loglama\\Logging.txt yoluna yazılacaktır.");
```

7.) Son hali olarak dosyalarımız aşağıdakine benzer gözükmelidir, teyit amaçlı fotoğlarını koyuyorum : 

Logger.cs : 

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xzt3g6nycpux67tjw69w.png)

LoggerFileProvide.cs : 

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v402n0ukchcrqcdzykpa.png)
 
HomeController.cs : 

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8tsk3bsw4ni5e73rhor2.png)
 
8.) "C:\" dizinine "Loglama"  adlı klasör yaratalım. "Loglama" adlı klasör'ün içerisine "Logging.txt" adlı txt dosyasını yaratalım. 

Dikkat ederseniz bu parametreyi "C:\\Loglama\\Logging.txt" HomeController'ın constructor'ında verdik tekrar amaçlı buraya kodu bırakıyorum : 

```
 _logger2 = LoggerFactory.Create(configure =>
              {
                  configure.AddProvider(new LoggerFileProvider("C:\\Loglama\\Logging.txt")); // burada hangi dosyaya loglama yapacağını bildiriyoruz.
              }).CreateLogger("Bu farklı bir logger.");
```
 9.) Projen dosyasının üstüne sağ tıklayıp "Open in Terminal" diyelim : 

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3jcicj6ie8gd9z1mv4r0.png)

10.) Çıkan terminale "dotnet run" yazalım.

11.) Ve tarayıcımızı açıp aşağıdaki linke gidelim : 

```
https://localhost:5001
```

Burası bizi Home/Index yönlendirecektir.

12.) Sayfamız yüklendikten sonra terminale bakalım : 

```
info: LogFabrikası.Controllers.HomeController[0]
      Bu bir mesajdır ve console yazılacaktır.
```

yazacaktır.

13.) Şimdi ise : "C:\Loglama\Logging.txt" yolundaki dosyaya açalım. Aşağıdaki gibi bir mesajı olan Loglama işlemi gerçeleşmiş olması gerekir. 

```
LogLevel: Information | EventId: 0|  TState : Bu bir mesajdır ve C:\Loglama\Logging.txt yoluna yazılacaktır. | Exception :  | Formatter : System.Func`3[Microsoft.Extensions.Logging.FormattedLogValues,System.Exception,System.String] + Datetime :  10.10.2021 19:30:42 


```

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4v5ngjqp32c5ijp9bsam.png)
 
 Sizde zaman vs.. farklı olabilir ama önemli olan 6. adımda yapmış olduğumuz _logger2.LogInformatin(...) metodumuzun içerisindeki yazıyı yazdırmasıdır.

Sonuç : 

LoggerFactory class'ı ile yeni Logger'lar oluşturabilirsiniz.

Bir dahaki yazımda görüşmek dileğiyle.

En iyi dileklerim ile.

Mustafa Samed Yeyin.

https://www.dotnettr.com/