Как мне написать HelloWorld в консоль с Serilog app.config из командной строки - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть продавец, который сказал мне, что он поддерживает файл App.config в Serilog, чтобы я мог изменить минимальный уровень журналов, поскольку их (бета) продукт заполняет файловую систему и приводит к ее сбоям.

Я не думаю, что они реализовали это правильно, потому что я не вижу ни одного файла App.config нигде в их базе выпуска. Насколько я понимаю, им нужно изменить свои регистраторы, чтобы они указывали на App.config, в противном случае, независимо от того, что я вставил туда, это не сработает.

Поэтому я подумал, что попробую протестировать простой файл, чтобы написать hello world с файлом app.config, и посмотреть, что я могу сделать. Это работало очень хорошо, когда я определил регистратор в коде, но как только я добавил файл app.config, регистратор перестал работать.

Находясь в папке на моем рабочем столе, у меня есть файлы Serilog dll от моего поставщика, и мои 2 файла также вставлены ниже, hw.cs и app.config. Я компилирую и запускаю его из командной строки, так как моя тестовая система не имеет доступа к Visual Studio или inte rnet.

Это работает: cs c .exe hw .cs /r:Serilog.dll /r:Serilog.Sinks.Console.dll /r:Serilog.Settings.AppSettings.dll

Когда я запускаю файл hw.exe, я См. только комментарии console.writeline (Шаг 1, Шаг 2 и т. д. c), а не комментарии регистратора.

Нужно ли делать что-то особенное, чтобы мой файл hw.cs знал, где находится файл App.config расположен? У меня есть правильные dll?

Спасибо за любую помощь в этом.

Код hw.cs ниже:

using System;
using Serilog;

namespace SerilogExample
{
    class HelloWorld
    {
        static void Main()
        {
            Console.WriteLine("Step 1");
            Log.Logger = new LoggerConfiguration()
                .ReadFrom.AppSettings()
                .CreateLogger();

            Console.WriteLine("Step 2");
            Log.Information("Hello world");

            Console.WriteLine("Step 3");
            int a = 10, b = 0;
            Log.Debug("Display a and b: {A} and {B}", a, b);
            Console.WriteLine("Step 4");

            Log.Error("---pretend something went wrong");
            Console.WriteLine("Step 5");

            Log.CloseAndFlush();
        }
    }
}

App.config ниже:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="serilog:minimum-level" value="Debug" />
    <add key="serilog:using:Console" value="Serilog.Sinks.Console" />
    <add key="serilog:write-to:Console" />
  </appSettings>
 </configuration>

1 Ответ

1 голос
/ 16 апреля 2020

Вы не должны делать ничего особенного в приведенном выше коде, но в. NET файл App.config должен находиться в той же папке исполняемого файла приложения, и для него должно быть указано имя NameOfYourApp.exe.config работа.

В вашем случае файл должен называться hw.exe.config, чтобы платформа могла его загрузить.


Обновление: попробуйте включить SelfLog чтобы увидеть, есть ли проблемы с Serilog:

Serilog.Debugging.SelfLog.Enable(
    msg => Console.WriteLine("Error from Serilog: {0}", msg));

Это то, что я вижу, запустив ваш код с hw.exe.config в той же папке:

enter image description here


пс: Serilog имеет две основные опции для настройки параметров через файл: App.config (через Serilog.Settings.AppSettings ) и appsettings.json (через Serilog.Settings.Configuration ). Современные приложения используют последнее.

...