繁体   English   中英

如何在 Azure Function 中配置 Serilog 设置?

[英]How to configure Serilog settings in Azure Function?

我正在创建我的第一个生产 Azure 函数,我正在尝试将日志信息写入本地文件,然后最终写入 Blob 存储。 本地文件更多用于开发故障排除,然后最终我希望将生产信息存储在 Blob 存储中。 我不仅是 Azure Functions 的新手,而且我也是 Serilog 的新手。 我在所有其他应用程序中都使用了 NLog,但无法让它与 Azure Functions 一起使用。

目前我正在尝试让本地日志正常工作。 我实际上似乎可以正常工作,但我不明白如何调整一些事情。

我要改变的第一件事是记录的信息量。 它似乎正在将大量系统类型的信息(例如请求信息)记录到 blob 存储中。 记录了太多东西,以至于我在代码中添加的条目丢失了。 看起来所有系统条目都标记为信息,这就是它可能出现在我的日志中的原因。 但是,我想看看我是否可以让它只记录我在代码中专门调用logger.Information(“some text”)时的数据。 有没有办法抑制所有 Microsoft 系统信息?

第二件事是如何使 Serilog 配置来自我的local.settings.json文件。 下面是我的文件示例,我不确定是否会在Values:属性中添加配置信息,或者是否将其放在该属性之外的属性中? 我假设它会在它自己的属性中,但到目前为止我所有的自定义设置都来自Values:属性?

我需要添加 Serilog.Settings.Configuration NuGet 包吗? 如果是这样,那么我不明白如何配置我的 Startup.cs 文件以从本地设置文件中获取信息,而不是直接在代码中配置设置。 最后,我想将它添加到依赖注入中,这样我也可以在其他类中使用记录器。

启动.cs

public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddTransient<IDataManager, DataManager>();

            ConfigureServices(builder.Services).BuildServiceProvider(true);
        }

        private IServiceCollection ConfigureServices(IServiceCollection services)
        {
            services
                .AddLogging(loggingBuilder =>
                    loggingBuilder.AddSerilog(
                        new LoggerConfiguration()
                            .MinimumLevel.Information()
                            .WriteTo.Console()
                            .WriteTo.File(@"D:\logs\AzureFunction\log_.txt", rollingInterval: RollingInterval.Day)
                            .CreateLogger())
                );

            return services;
        }

Local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "ProcessLookBackDays": "90",
    "SqlConnection": "connection info",
    "StorageConnection": "connection info"
    "AzureWebJobsStorage": "connection info"
    "InputContainer": "test-files",
    "InputFolder": "input",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet"
  },
  "Serilog": {
    "Using": [ "Serilog.Sinks.File" ],
    "MinimumLevel": {
      "Default": "Information"
    },
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "D:\\logs\\AzureFunction\\log_.log",
          "rollingInterval": "Day",
          "outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} {CorrelationId} {Level:u3}] {Username} {Message:lj}{NewLine}{Exception}"
        }
      }
    ]
  }
}
  • local-setting. Json local-setting. Json不会反映在 azure 函数应用中。 顾名思义,local-setting 仅供本地使用,而使用 azure 时,您需要使用应用程序设置并阅读它们。

在此处输入图像描述

  • 只需在应用程序设置中添加一个新设置,然后您就可以使用下面的代码来读取设置。
var appsettings = Environment.GetEnvironmentVariable("Name of the setting");
  • 当您想将外部配置与 serilog 一起使用时,您可以使用Serilog.Settings.Configuration

  • 现在您可以配置日志事件的最低级别,这样所有重要性低于指定最低级别的日志事件都不会被记录。

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Information)
    .CreateLogger();
  • 在这里,我们指定了.MinimumLevel.Debug()restrictedToMinimumLevel这两个属性,该属性规定了该特定接收器的最低级别。 接收器只是您可以登录的地方,它们是使用Writeto标签配置的。 例如,在上面的代码中,sink 是一个控制台。 还有其他的水槽。

最低级别是详细的调试、信息、警告、错误、致命。

参考:-

从 Ashish Patel 的应用设置中读取配置

使用 serilog 过滤日志

Serilog 设置配置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM