标签: serilog

如何在不重新启动应用程序的情况下重新配置Serilog?

在长时间运行的进程(例如Windows服务或ASP.NET应用程序)中,有时需要暂时提高日志级别而不停止应用程序.NLog可以监视日志记录配置文件,并在每次修改时重新读取它们.

https://github.com/nlog/NLog/wiki/Configuration-file#automatic-reconfiguration

Serilog也可以吗?

logging serilog

8
推荐指数
1
解决办法
3346
查看次数

在ASP.NET Core 2日志更新后将ILogger映射到Serilog的Logger

来自@nblumhardt帖子:

然后你可以继续删除任何其他记录器配置:appsettings.json中不需要"Logging"部分,任何地方都不需要AddLogging(),也不需要通过Startup.cs中的ILoggerFactory进行配置.

当我using Serilog;ILogger我的控制器时,我得到一个例外.

private readonly ILogger _logger;

public CustomersController(ILogger logger)
{
    _logger = logger;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

处理请求时发生未处理的异常.
InvalidOperationException:尝试激活"Customers.Api.Controllers.CustomersController"时无法解析类型"Serilog.ILogger"的服务.

我还需要在Startup.ConfigureServices()方法中向DI提供一些信息吗?

据我所知,我的课程课程遵循帖子中的说明.

public class Program
{
    public static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.Console()
            .CreateLogger();

        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseSerilog()
            .Build();
}
Run Code Online (Sandbox Code Playgroud)

c# serilog asp.net-core

8
推荐指数
1
解决办法
1万
查看次数

包恢复失败.回滚包更改 - Serilog.AspNetCore

我有一个asp.net Core项目,我正在尝试添加一个记录器.我选择了我在其他项目中使用过的SeriLog.

但是,当我试图添加" Serilog.AspNetCore "软件包版本2.0.0时,我正在"

包恢复失败.回滚'BackEnd'的包更改.

我的csproj包含以下设置:

<PropertyGroup>
   <TargetFramework>netcoreapp2.0</TargetFramework>
   <DockerComposeProjectPath>..\..\docker-compose.dcproj</DockerComposeProjectPath>
   <AssemblyName>BackEnd</AssemblyName>
  <RootNamespace>BackEnd</RootNamespace>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

Allready已经尝试清除所有nuget缓存,重建,重启VS.

在Win10上运行,Visual Studio 2017 15.3.0

是否有日志可以提供更多详细信息,为什么我收到此错误?任何建议如何解决?

*更新 - 详细的构建日志(感谢@ Leo-MSFT):

...

使用.NETCoreApp检查System.Security.Cryptography.Csp 4.3.0的兼容性,版本= v2.0.

使用.NETCoreApp检查runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple 4.3.0的兼容性,版本= v2.0.

所有包和项目都与.NETCoreApp兼容,版本= v2.0.

检测到的包降级:Microsoft.Extensions.DependencyInjection从2.0.0升级到1.1.1.直接从项目引用包以选择不同的版本.

BackEnd(> = 1.0.0) - > Serilog.AspNetCore(> = 2.0.0) - > Microsoft.Extensions.DependencyInjection(> = 2.0.0)

BackEnd(> = 1.0.0) - > Microsoft.Extensions.DependencyInjection(> = 1.1.1)

包恢复失败.回滚'BackEnd'的包更改.

经过的时间:00:00:01.4928161

==========完成==========

是的,它似乎与" Microsoft.Extensions.DependencyInjection "有关

.net nuget serilog asp.net-core visual-studio-2017

8
推荐指数
1
解决办法
3237
查看次数

设置Serilog以将日志写入SQL Server数据库表

我正在尝试设置Serilog将日志写入我的db表.

以下是我尝试设置日志记录到SQL Server的细分.

1)安装Nuget包,Serilog和Serilog.Sinks.MSSqlServer

2)我建立了一个名为Logger.cs的类,它包含了Serilog的所有配置:

public static class Logger
{
    private static readonly ILogger _Logger;

    static Logger()
    {

        var connStr = "data source=DESKTOP-BLAH;Initial Catalog=DBNAME;Trusted_Connection=True;";

        _Logger = new LoggerConfiguration()
            .WriteTo.MSSqlServer(connStr, "ApplicationLogs", 
            columnOptions: GetSqlColumnOptions(), restrictedToMinimumLevel: LogEventLevel.Debug, batchPostingLimit: 1)
            .CreateLogger();

        Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg));

    }

    public static ColumnOptions GetSqlColumnOptions()
    {
        var colOptions = new ColumnOptions();

        colOptions.Store.Remove(StandardColumn.Properties);
        colOptions.Store.Remove(StandardColumn.MessageTemplate);
        colOptions.Store.Remove(StandardColumn.Message);
        colOptions.Store.Remove(StandardColumn.Exception);
        colOptions.Store.Remove(StandardColumn.TimeStamp);
        colOptions.Store.Remove(StandardColumn.Level);

        colOptions.AdditionalDataColumns = new Collection<DataColumn>
        {
            new DataColumn{DataType = typeof(DateTime), ColumnName = "LogTimeStamp"},
            new DataColumn{DataType = typeof(Int32), ColumnName = "RecordNum"},
            new DataColumn{DataType = typeof(string), …
Run Code Online (Sandbox Code Playgroud)

c# sql-server logging serilog

8
推荐指数
1
解决办法
6151
查看次数

如何强制Serilog仅记录我的自定义日志消息

我将Serilog配置appsettings.json为通过以下方式通过我的应用程序中的tcp 将条目登录到Logstashasp net core web api

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Network" ],
    "MinimumLevel": {
      "Default": "Information"
    },
    "WriteTo:0": {
      "Name": "TCPSink",
      "Args": {
        "uri": "tcp://172.26.48.39:5066"
      }
    },
    "Properties": {
      "app_id": "my-service-api",
      "index": "my-app-"
    }
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

但是它记录了太多消息。例如,我在令牌控制器中有一个CreateToken操作方法:

[HttpPost]
public ActionResult<string> CreateToken([FromBody] CredentialsModel credentials)
{
    var user = _authentication.Authenticate(credentials);

    if (user == null)
    {
        Log.Warning("Unable to authenticate an user: {Login}, {Password}",
        credentials.Username, credentials.Password);

        return Unauthorized();
    }

    return BuildToken();
}
Run Code Online (Sandbox Code Playgroud)

我只需要记录一条消息:

无法验证用户的登录密码

但是Serilog记录以下内容:

请求启动HTTP …

c# serilog asp.net-core

8
推荐指数
1
解决办法
2710
查看次数

Serilog - 如何制作自定义控制台输出格式?

我在我的 C# 项目中使用Serilogserilog-sinks-console,我想知道如何修改控制台输出的格式而不创建全新的格式化程序。我只需要调整一件事信息 java (slf4j/logback) 之类的格式。

由此:

00:19:49 [DBG] Microsoft.AspNetCore.Hosting.Internal.WebHost - App starting
00:19:49 [DBG] Microsoft.AspNetCore.Hosting.Internal.WebHost - App started
Run Code Online (Sandbox Code Playgroud)

进入这个:

00:19:49 [DBG] m.a.h.i.WebHost - App starting
00:19:49 [DBG] m.a.h.i.WebHost - App started
Run Code Online (Sandbox Code Playgroud)

或者只是这个简单的格式:

00:19:49 [DBG] WebHost - App starting
00:19:49 [DBG] WebHost - App started
Run Code Online (Sandbox Code Playgroud)

serilog

7
推荐指数
1
解决办法
4158
查看次数

Serilog 不使用 .NET Core 2.2 写入文件

PS 下面的代码工作正常。问题出在显示器和椅子之间。@jpgrassi 的回答让我朝着正确的方向解决了这个问题。

我在 program.cs 中有以下内容:

public class Program {
    public static void Main(string[] args) {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseSerilog((ctx, config) => { config.ReadFrom.Configuration(ctx.Configuration); })
            .UseStartup<Startup>();

}
Run Code Online (Sandbox Code Playgroud)

在 appsettings.json 中:

{
  "Serilog": {

    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Default": "Information",
        "Microsoft": "Information",
        "System": "Information"
      }
    },

    "WriteTo": [
      {
        "Name": "RollingFile",
        "Args": {
          "pathFormat": "log-{Date}.txt",
        }
      }
    ]
  },

  "AllowedHosts": "*"
}
Run Code Online (Sandbox Code Playgroud)

在控制器中,我写了一个日志_logger.LogWarning("foo");,但文件没有在任何地方写出,我看不到任何错误。

我从 Nuget 导入了以下包:Serilog、Serilog.AspNetCore、Serilog.Settings.Configuration、Serilog.Sinks.RollingFile。

我错过了什么?

c# serilog asp.net-core

7
推荐指数
1
解决办法
8086
查看次数

如何在不添加其他上下文属性的情况下将自定义属性推送到 Serilog 的 LogContext?

在 .Net Core 2.2 API 中,我尝试使用 Serilog 记录到 SQL Server,以利用其结构化日志记录功能。除了标准字段(Id、Timestamp、Level、Message、MessageTemplate、LogEvent)之外,我还需要在每个日志条目中捕获用户名和 IP 地址。我看过这篇文章,但我想在一个地方做这件事,这样开发人员就不必在每个日志语句中手动添加它。我的Startup.csctor 中有以下代码段:

    public Startup(IConfiguration configuration)
    {
        _configuration = configuration;

        Log.Logger = new LoggerConfiguration()
            .ReadFrom.Configuration(configuration)
            .Enrich.FromLogContext()
            .Enrich.With<SerilogContextEnricher>()
            .CreateLogger();
    }
Run Code Online (Sandbox Code Playgroud)

.Enrich.FromLogContext()调用使静态 LogContext 可供我在自定义中间件中添加自定义属性(用户名和 IP 地址),如下所示:

    public class SerilogMiddleware
    {
        private static readonly ILogger Log = Serilog.Log.ForContext<SerilogMiddleware>();
        private readonly RequestDelegate _next;

        public SerilogMiddleware(RequestDelegate next)
        {
            this._next = next ?? throw new ArgumentNullException(nameof(next));
        }

        public async Task Invoke(HttpContext httpContext)
        {
            if (httpContext == null) throw new ArgumentNullException(nameof(httpContext)); …
Run Code Online (Sandbox Code Playgroud)

serilog asp.net-core-webapi

7
推荐指数
1
解决办法
7238
查看次数

在 ASP .NET Core Web API 控制器中注入 Serilog 的 ILogger 接口

我能找到的关于在 ASP .NET Core Web 应用程序ILogger<T>中使用 Serilog 的所有示例都使用 Microsoft 的界面,而不是使用 Serilog 的ILogger界面。

我如何才能使 Serilog 的 ILogger 可以通过构造函数注入?

using Serilog;

public class HomeController : Controller
{
    ILogger logger;

    public HomeController(ILogger logger)
    {
        this.logger = logger;
    }

    public IActionResult Index()
    {
        this.logger.Information("Index was called");
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection serilog asp.net-core

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

无法解析“Serilog.ILogger”类型的服务:“AspNetCore.Serilog.RequestLoggingMiddleware”

我是编程新手,我正在尝试为 .net 核心项目实现日志记录解决方案。

我想收集默认和 Microsoft 类别日志。

APPSETTING.JSON

      {
          "Serilog": {
              "MinimumLevel": {
                  "Default": "Information",
                  "System": "Warning",
                  "Microsoft": "Information"
              },
              "File": {
                  "location": "logs/timeapi.log"
              }
          },
          "EnableSwagger": true
      }
Run Code Online (Sandbox Code Playgroud)

程序.CS

 public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>()
                    .UseSerilogRequestLogging();
Run Code Online (Sandbox Code Playgroud)

启动文件

app.UseSerilogRequestLogging(options =>
            options.RequestProjection =
            r => new { r.IsHttps, QueryString = r.QueryString.Value });
        app.UseMvc();
Run Code Online (Sandbox Code Playgroud)
https://github.com/mthamil/AspNetCore.Serilog.RequestLoggingMiddleware
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Unable to resolve service for type 'Serilog.ILogger' while attempting to activate 'AspNetCore.Serilog.RequestLoggingMiddleware.SerilogRequestMiddleware'.
Run Code Online (Sandbox Code Playgroud)

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

7
推荐指数
1
解决办法
3210
查看次数