Nano Hash - криптовалюты, майнинг, программирование

Как использовать метод Serilog ReadFrom.KeyValuePairs?

В моем appsettings.json я написал:

{
    "Logging": {
        "PathLogsFile": "./Logs",
         "IncludeScopes": false,
         "LogLevel": {
             "Default": "Debug",
             "System": "Information",
             "Microsoft": "Information"
         }
    }
}

и в моем файле startup.cs в конструкторе

var pathLogsFile = Configuration["Logging:PathLogsFile"];            
var logLevelApp = Configuration.GetSection("Logging:LogLevel:Default");

Log.Logger = new LoggerConfiguration()        
    .ReadFrom.KeyValuePairs(new List<KeyValuePair<string, string>>()
        {
            new KeyValuePair<string, string>(logLevelApp.Key, logLevelApp.Value)                        
        }.ToDictionary(x => x.Key, x => x.Value)) 
    .Enrich.FromLogContext()
    .WriteTo.Logger(lc => lc
        .Filter.ByIncludingOnly(evt => evt.Level == Serilog.Events.LogEventLevel.Error)
        .WriteTo.RollingFile(Path.Combine(pathLogsFile, "error-{Date}.log")))
    .WriteTo.Logger(lc => lc
        .Filter.ByIncludingOnly(evt => evt.Level >= Serilog.Events.LogEventLevel.Debug)
        .WriteTo.RollingFile(Path.Combine(pathLogsFile, "log-{Date}.log")))
    .CreateLogger();

но минимальное чтение из appsettings не работает. Любые идеи? Как я могу исправить?

18.03.2017

  • Пожалуйста, не вставляйте теги в заголовок. Прочтите статью справочного центра о том, как правильно использовать теги stackoverflow.com/help/tagging. 18.03.2017
  • Прости @Tseng 18.03.2017

Ответы:


1

Я думаю, вам не следует использовать ReadFrom.KeyValuePairs и использовать ConfigurationBuilder .AddJsonFile("appsettings.json"), как предложил Parameswar Rao. Однако, если вы действительно хотите использовать KeyValuePair, вот некоторый код, использующий его:

var logger = new LoggerConfiguration()
            .ReadFrom.KeyValuePairs(new Dictionary<string, string>() {
                { "write-to:File.fileSizeLimitBytes","20971520" },
                { "write-to:File.rollOnFileSizeLimit","true" },
                { "write-to:File.retainedFileCountLimit","10" },
                { "minimum-level","Debug" },
                { "write-to:File.path",@"C:\Temp\log.txt" },
                { "using:File","Serilog.Sinks.File" },
            }).CreateLogger();
        logger.Information("test");

Важно то, что вы не добавляете к своим ключам префикс Serilog:, как в appSettings.

04.05.2018

2

Я считаю, что это то, что вы ищете

Вот пример конфигурации Serilog в appsettings.json

    {
  "Serilog": {
    "Using":  ["Serilog.Sinks.Literate"],
    "MinimumLevel": "Debug",
    "WriteTo": [
      { "Name": "LiterateConsole" },
      { "Name": "File", "Args": { "path": "%TEMP%\\Logs\\serilog-configuration-sample.txt" } }
    ],
    "Enrich": ["FromLogContext", "WithMachineName", "WithThreadId"],
    "Properties": {
        "Application": "Sample"
    }
  }
}

startup.cs

var configuration = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json")
        .Build();

var logger = new LoggerConfiguration()
        .ReadFrom.Configuration(configuration)
        .CreateLogger();
18.03.2017
  • Нет ли способа получить значения раздела Logging из моего appsettings.json (который создается командой dotnet new mvc -au None -f netcoreapp1.1), а затем в startup.cs использовать метод ReadFrom.KeyValuePairs()? 18.03.2017
  • пакет Serilog.Settings.Configuration, ReadFrom.Configuration() позволяет нам извлекать ту же информацию из appsettings.json. Единственное, что вам нужно, это убедиться, что в appsettings.json есть раздел serilog. 18.03.2017
  • Как я могу преобразовать свой код из Log.Logger = new LoggerConfiguration() в appsettings.json в разделе serilog? 18.03.2017
  • @FabioBit проект github.com/Suchiman/SerilogAnalyzer добавляет быстрое исправление ‹Ctrl+.› в VisualStudio для генерировать JSON из конфигурации C# Serilog. 19.03.2017

  • 3

    Как упоминалось в ответе Парамесвара Рао, если вы используете ConfigurationBuilder, вам нужно использовать метод .ReadFrom.Configuration вместо этого.

    Чтобы расширить пример asidis, вы можете взглянуть на конфигурацию, используемую в моем проекте. Приложение загрузит содержимое узла logging как узел IDictionary<string, string>, прежде чем передать его узлу .ReadFrom.KeyValuePairs:

    "logging": {
      "minimum-level": "Information",
      "using:Console": "Serilog.Sinks.Console",
      "write-to:Console": "",
      "using:Discord": "CXuesong.Uel.Serilog.Sinks.Discord",
      "write-to:DiscordWebhook.webhookId": "xxxx",
      "write-to:DiscordWebhook.webhookToken": "xxxx"
    },
    

    Некоторые моменты, которые стоит отметить:

    • KeyValuePairSettings преобразует пары в Dictionary, так что не дублируйте ключи
    • Вам нужно добавить using записей с именем сборки в качестве значения, прежде чем использовать в ней приемники. Чтобы уменьшить количество дубликатов ключей, используйте using:some_random_text в качестве имени ключа.
    • Полный синтаксис записи write-to:
    "write-to:MethodName[.argumentName]": "argumentValue"
    

    MethodName — это имя метода расширения конфигурации приемника, как в loggerConfig.WriteTo.MethodName. argumentName — имя аргумента метода.

    Если вы не передаете методу никаких аргументов, просто игнорируйте часть .argumentName.

    03.08.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..