标签: serilog

Serilog附加属性

我使用Serilog并将事件记录到SQL Server(使用Serilog,Serilog.Framework.Logging和Serilog.Sinks.MSSqlServer库).

作为MVC6应用程序的一部分,当我记录事件并将选项设置为包含属性时,我在XML列中看到了一些其他属性.

如果我发出类似以下声明的内容:

Log.Information("{Property1}", "Value1");
Run Code Online (Sandbox Code Playgroud)

我在Properties列中看到如下内容:

<properties>
  <property key="Property1">Value1</property>
  <property key="SourceContext">WebApplication4.Controllers.BaseController</property>
  <property key="ActionId">1b9f9c7e-7c5c-4b14-a30d-99f2ebc88c51</property>
  <property key="RequestId">80000191-0001-f000-b63f-84710c7967bb</property>
</properties>
Run Code Online (Sandbox Code Playgroud)

这些额外的属性来自哪里?我可以设置与这些类似的其他属性吗?如果是这样,我在哪里设置它们?如果我将它们包含在消息中(类似于上面的Property1),我可以设置其他属性,但我可能希望包含消息中没有的其他属性.

serilog asp.net-core-mvc

2
推荐指数
1
解决办法
2015
查看次数

ASPNet5 SeriLog LogDebug无法正常工作

我有一个配置了serilog的ASP.Net5 Web应用程序。在我的家庭控制器中,我打印警告,错误,详细和调试消息,但是在我的控制台中仅显示警告,错误和详细消息。缺少调试消息我的配置是:

public class Startup
{
  public Startup(IHostingEnvironment env)
  {

      Log.Logger = new LoggerConfiguration()
      .MinimumLevel.Verbose()
      .WriteTo.ColoredConsole()
      .WriteTo.RollingFile(Path.Combine(env.WebRootPath, "log-{Date}.txt"))
      .CreateLogger();
  }


  public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
  {
      loggerFactory.AddSerilog();
  }

}
Run Code Online (Sandbox Code Playgroud)

我通过依赖项注入来消耗记录器,如下所示:

public class HomeController : Controller
{
    private readonly ILogger _logger;
    public HomeController(ILogger<HomeController> logger)
    {
      _logger = logger;
    }

    public async Task<IActionResult> Index()
    {
        _logger.LogWarning("Warning");
        _logger.LogVerbose("Verbose");
        _logger.LogDebug("Debug")
        _logger.LogError("Error");
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的日志窗口显示:

2016-04-13 12:41:24 [Warning] Warning
2016-04-13 12:41:24 [Debug] Verbose
2016-04-13 12:41:24 [Error] Error
Run Code Online (Sandbox Code Playgroud)

还有其他调试消息与ASP.Net函数中的构建有关。

谁能告诉我我在做什么错?谢谢。

c# asp.net serilog

2
推荐指数
1
解决办法
753
查看次数

如何在.NET Core中的启动类构造函数中访问AppSettings

我正在尝试添加SeriLog设置,例如最低日志级别和配置文件中的滚动文件路径。标准是这样硬编码它们:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .WriteTo.RollingFile("C:/LogFiles/log-{Date}.txt")
        .CreateLogger();
}
Run Code Online (Sandbox Code Playgroud)

基本上,我需要能够从Startup构造函数中的appsettings.json访问值。像这样:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Is((LogEventLevel)Enum.Parse(typeof(LogEventLevel),
        Configuration.GetValue<string>("AppSettings.MinimumLoggingLevel")))
    .WriteTo.RollingFile(Configuration.GetValue<string>("AppSettings.RollingFilePath"))
Run Code Online (Sandbox Code Playgroud)

Configuration.GetValue在另一篇SO文章中找到了该语法,但始终返回null

c# serilog asp.net-core

2
推荐指数
1
解决办法
2515
查看次数

Serilog可使用哪些文件名占位符?

我在带有RollingFile的.NET Core应用程序上使用Serilog。我想知道是否存在不同的文件名占位符?我只知道{日期}。

例如,我有类似的代码

        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Information()
            .WriteTo.RollingFile("Logs/{Date}.log")
            .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

文件名还有其他选项吗,例如{Date}?我想按小时查看日志文件。

.net logging filenames serilog

2
推荐指数
2
解决办法
3389
查看次数

Serilog实现了打破其他配置

将serilog实施到我们的项目中.我们已经实现了AspNetCoreRateLimit来解决对API的调用.该项目是.Net Core项目,但由于某些依赖性而构建了针对Net461的项目.

在serilog之前,api很好.

现在安装了serilog,我们收到了一个错误.

从调用之前的错误起泡,直到引入了serilog.

services.Configure<IpRateLimitOptions>(_configuration.GetSection("IpRateLimiting"));
Run Code Online (Sandbox Code Playgroud)

Startup()具有:

Log.Logger = new LoggerConfiguration()
          .WriteTo.File("Logs/FSCPAPI-{Date}.log")
          .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

以下是在Configure()中

loggerfactory.AddSerilog();
Run Code Online (Sandbox Code Playgroud)

来自services.Configure <>()的错误是:

System.TypeLoadException发生HResult = 0x80131522消息=方法'get_Name'类型'Microsoft.Extensions.Options.ConfigurationChangeTokenSource`1'来自程序集'Microsoft.Extensions.Options.ConfigurationExtensions,Version = 1.1.2.0,Culture = neutral,PublicKeyToken = adb9793829ddae60 '没有实施.Source = Microsoft.Extensions.Options.ConfigurationExtensions StackTrace:在C的NGB.IFS.PurchApp.Services.Startup.ConfigureServices(IServiceCollection服务)的Microsoft.Extensions.DependencyInjection.OptionsConfigurationServiceCollectionExtensions.Configure [TOptions](IServiceCollection services,IConfiguration config)中:\Users\saynort\Documents\Repos \ngb.ifs.purchapp \ngb.ifs.purchapp\NGB.IFS.PurchApp.Services\Startup.cs:第86行

我安装了serilog,serilog.extensions.logging和serilog.sinks.file Nuget软件包.

.net c# serilog .net-core asp.net-core-webapi

2
推荐指数
1
解决办法
318
查看次数

如何从logevent获取格式化的输出

在WriteTo.Observer方法中,我想传递格式化日志消息,因为它是使用格式化模板呈现的。我该怎么做?谢谢

class Program
{
    static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Information()
            .WriteTo.LiterateConsole()
            .WriteTo.RollingFile("log-{Date}.txt")
            .WriteTo.Observers(events => events.Do(evt => { Console.WriteLine($"Observed event {evt.MessageTemplate.Text}"); }).Subscribe())
            .WriteTo.Observers(events => events.Do(evt => { LogHandler(evt.MessageTemplate.Text);}).Subscribe())
            .CreateLogger();

        Log.Logger.Information("Log msg from Main");
        Console.ReadLine();
    }

    public static void LogHandler(string logMsg)
    {
        Console.WriteLine("LogHandler: " + logMsg); //I want the complete formatted log message as it would appear in a file i.e. "[10:20:14 INF] Log msg from DoNothing"
    }
}
Run Code Online (Sandbox Code Playgroud)

serilog

2
推荐指数
1
解决办法
1861
查看次数

将Serilog与.Net核心和App Insights结合使用

之前,我曾直接使用App见解来进行应用程序日志记录,而且我已经看到.Net核心平台还创建了跟踪事件,这些事件都涉及到App见解。

在一个新的.Net核心API应用程序中,我想使用Serilog进行应用程序日志记录,并使用App Insight来存储和可视化日志事件。我想知道:

  1. 如何继续获取.Net核心.created跟踪事件以了解App见解?

  2. 如何将关联ID从应用程序传递到.Net核心创建的跟踪事件?

  3. App洞察门户中的端到端交易功能会一起显示所有事件吗?对我来说,了解并密切注意SQL调用的延迟非常重要。

serilog azure-application-insights .net-core asp.net-core-2.0

2
推荐指数
2
解决办法
3544
查看次数

ASP.NET Core日志记录不适用于生产环境

事实证明,该问题与NLogASP.NET日志记录系统无关。日志配置正确,但是Debug由于配置错误,构建服务器正在将构建发布到生产中。

我试图在我的ASP.NET Core 2.0(SDK 2.1.401)项目中设置第三方记录器。到目前为止,我曾尝试SerilogNLog。但是我对两个都有同样的问题。总结一下问题,

  • 当我运行该应用程序时,它可以按预期工作dotnet run(例如,在Development环境中)
  • 但是当我运行二进制文件时dotnet MyApplication.dll(即在Production环境中)却没有。
  • 我的文件中没有"Logging"Development环境部分定义任何内容appsettings.Development.json

下面描述的问题是针对的NLog。我尝试过SeriLog并遇到相同的问题。

这是来自的相关部分 Program.cs

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseApplicationInsights()
        .UseStartup<Startup>()
        .ConfigureLogging((env, logging) =>
        {
            logging.ClearProviders();
            logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
        })
        .UseNLog()
        .Build();
Run Code Online (Sandbox Code Playgroud)

注意我已经清除了所有提供程序并添加NLognlog.config文件定义:

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseApplicationInsights()
        .UseStartup<Startup>()
        .ConfigureLogging((env, logging) =>
        {
            logging.ClearProviders();
            logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
        }) …
Run Code Online (Sandbox Code Playgroud)

c# logging nlog serilog asp.net-core-logging

2
推荐指数
1
解决办法
2643
查看次数

serilog.settings.appsettings和文件翻转间隔问题

我正在使用SeriLog登录基于IdentityServer3的身份验证服务。我只是用serilog.sinks.file插件替换了serilog.sinks.literate插件,以便获得File插件提供的滚动文件功能。当在Startup中将File插件与以下配置代码一起使用时。 CS,它按我的预期工作。(我仅使用RolloverInterval.Minute进行测试。部署代码时,我将切换到RolloverInterval.Day。)

Log.Logger = new LoggerConfiguration()
.WriteTo.File("E:\\Site\\AuthSvc\\Trace.log", rollingInterval: RollingInterval.Minute, retainedFileCountLimit: 10)
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)

就像我说的那样,它可以按预期工作,每分钟创建一个新文件。

现在,我尝试使用serilog.settings.appsettings插件在appSettings中而不是在代码中管理所有配置。所以我将上面的代码更改为:

Log.Logger = new LoggerConfiguration()
.ReadFrom.AppSettings()
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)

我在web.config appSettings中包含以下内容:

<add key="serilog:minimum-level" value="Debug"/>
<add key="serilog:using:File" value="Serilog.Sinks.File"/>
<add key="serilog:write-to:File.path" value="E:\Site\AuthSvc\Trace.log"/>
<add key="serilog:write-to:File.rollingInterval" value="RollingInterval.Minute"/>
<add key="serilog:write-to:File.retainedFileCountLimit" value="10"/>
Run Code Online (Sandbox Code Playgroud)

当我以上述配置运行服务时,出现错误消息“未找到请求的值'RollingInterval.Minute'”。任何RollingInterval值都会发生类似的错误。

如果我删除了最后两个appSettings,它可以正常工作。我是在做错什么,还是appSettings插件不支持文件接收器插件的滚动文件功能?

serilog

2
推荐指数
1
解决办法
705
查看次数

如何在深层调用中使用serilog跟踪请求

您好,我在ASP NET Core application设计接口时遇到了问题。我正在使用serilog,当请求进入控制器时,它会收到一个GUID。我试图找到一种优雅的方法来跟踪呼叫中的各个请求,而又不包括GUID在我的所有接口中。

public interface IService
{
   Task GetSomething(string corellationId);  //how do i get rid of this id
}

public interface ISomeOtherService
{
    Task DoSomethingElse(string corellationId); //how do i get rid of this id
}

public class SomeController:Controller
{
   public IService someService {get;set;}

   [HttpGet]
   public Task Get()
   {
     string corellationId=Guid.NewGuid().ToString();
     Log.Information($"[{corellationId}] - Request started");
     try
     {
       Log.Information($"[{corellationId}] - Get");
       await this.someService.GetSomething(corellationId);
     }catch(Exception ex)
     {
     Log.Error($"[{corellationId}] - Get",ex.Message);
     }
   }
}

public …
Run Code Online (Sandbox Code Playgroud)

c# design-patterns interface serilog asp.net-core

2
推荐指数
1
解决办法
48
查看次数