Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to config `Serilog` to write to the application directory with the cofig file?

I'm using Serilog on a .net core. I want to config the log path to the application directory.

I see there's an extension https://github.com/serilog/serilog-settings-configuration that enable Serilog to read from Configuration. In the example , the path is configured as "%TEMP%\\Logs\\serilog-configuration-sample.txt". How can I set it to the working directory?

I've searched on so, and know that it can be done by code, but it seems there's no one asking how to do this by the config file, i.e. appsettings.json.

Current configuration:

{
  "Serilog": {
    "Using": [
      "Serilog.Sinks.File"
    ],
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "File",
        "Args": { "path": "Logs\\serilog-configuration-sample.txt" }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName" ],
    "Destructure": [
    ],
    "Properties": {
    }
  },
  "AllowedHosts": "*"
}

I want the log path to be set to the working directory. But currently it's in "C:\Program Files\IIS Express".

like image 288
mosakashaka Avatar asked Apr 02 '19 12:04

mosakashaka


People also ask

Where does Serilog write to by default?

By default, serilog will only log to the console.

How does Serilog work in net core?

Serilog is a third-party, open-source library that integrates nicely with ASP.NET Core and allows developers to easily log-structured event data to the console, to files, and various kinds of log targets.


2 Answers

Configuring path like Logs/log.txt will write log files under logs folder in working directory

"WriteTo": [
  {
    "Name": "File",
    "Args": {
      "path": "Logs/log.txt"
    }
  }

Also you can check this answer for another option

like image 155
ElasticCode Avatar answered Oct 22 '22 00:10

ElasticCode


You can add a "RollingFile" wich can write to a local path file. In this example I'm writing in a File inside of the root of my project as it shows bellow.

{
    "Name": "RollingFile",
    "Args": {
      "pathFormat": ".\\Logs\\logs.txt",
      "fileSizeLimitBytes": 1048576
    }
  },

Also the full json on appsettings.json end up like this (in case you need a full example)

...
"Serilog": {
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "System": "Debug",
        "Microsoft": "Debug"
      }
    },
    "WriteTo": [
      {
        "Name": "ApplicationInsightsEvents",
        "Args": {
          "instrumentationKey": "xxxxxxxxxx"
        }
      },
      {
        "Name": "RollingFile",
        "Args": {
          "pathFormat": ".\\Logs\\logs.txt",
          "fileSizeLimitBytes": 1048576
        }
      },
      { "Name": "Console" },
      {
        "Name": "EventLog",
        "Args": {
          "source": "API NAME",
          "logName": "CustomLog",
          "restrictedToMinimumLevel": "Warning"
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
    "Properties": {
      "Application": "API NAME"
    }
  }
...
like image 31
Simon Restrepo Avatar answered Oct 22 '22 00:10

Simon Restrepo