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

12,535

Solution 1

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

Solution 2

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"
    }
  }
...
Share:
12,535
mosakashaka
Author by

mosakashaka

Updated on July 20, 2022

Comments

  • mosakashaka
    mosakashaka almost 2 years

    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".

  • mosakashaka
    mosakashaka about 5 years
    add a dot sign before the path seems to have no effect.... the log is still writing to IIS directory when I debug it in the visual studio...
  • mosakashaka
    mosakashaka about 5 years
    The approach in this answer seems have no effect.... But the link you provided, which use the environment variable works for me.
  • ElasticCode
    ElasticCode about 5 years
    @mosakashaka can I know which version of .Net Core you are using?