标签: serilog

如何在Unity中使用Serilog?

我发现了serilog(.net的结构化日志),并发现了很多优点.但是我遇到了一些问题.我有4个项目,一个是web,一个是基础设施,另外两个是windows服务,我想声明一次serilog配置并多次使用它.而且我也希望将它与依赖注入一起使用.我已经在网上搜索了三天了,但我没有找到任何有用的东西,请一些人帮助我.

例如,我希望这个类成为我的日志类.

public interface IMyLogger
{
    void Information(string message, object[] parameters);
}

public class MyLogger : IMyLogger
{
    public MyLogger()
    {
    }
    public void Information(string message, object[] parameters)
    {
        Log.Information("LogType : {LogType} - Operation : {Operation}", parameters);
    }
}
public class UserClass
{
private readonly IMyLogger _myLogger;
public UserClass(IMyLogger myLogger)
        {
            _myLogger = myLogger;
        }
}
Run Code Online (Sandbox Code Playgroud)

现在我不知道应该把这行代码放在哪里:

Log.Logger = new LoggerConfiguration()
            .WriteTo.Console()
            .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

Tnx提前.

c# asp.net-mvc dependency-injection unity-container serilog

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

Serilog:打开日志文件

有没有办法从日志类中获取完整的文件名?记录器创建一个格式如下的文件C:\MyPath\log-20160631.txt

我无法访问用于记录器初始化的源文件名。

编辑:这是记录器的初始化:

Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.LiterateConsole()
            .WriteTo.RollingFile(@"C:\MyPath\log.txt")
            .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

在代码中的每个位置我都可以使用例如Log.Information(),但是我如何获取接收器信息?我想获取传递给滚动文件接收器的文件名。

我当前的解决方法是手动生成真实文件(疯狂丑陋的代码):

public string LogFilename
{
   get
   {
      string path = Path.GetDirectoryName(LogFilenameTemplate);
      string filenameWithoutExtension = Path.GetFileNameWithoutExtension(LogFilenameTemplate);
      string extension = Path.GetExtension(LogFilenameTemplate);
      string date = DateTime.Now.ToString("yyyyMMdd");
      string fullFilename = Path.Combine(path, filenameWithoutExtension + "-" + date + extension);
      return fullFilename;
   }
}
Run Code Online (Sandbox Code Playgroud)

我从GitHub Repo获得的格式。

c# serilog

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

Serilog:请求ID实施

最近我配置了Serilog以与ASP.NET Core 2 MVC应用程序配合使用,接下来的任务是在系统的每一层上跟踪传入的Web应用程序请求.所以基本上,我们想要传播一些令牌(比如RequestId由Serilog生成到较低层的应用程序).

"Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.RollingFile" ],
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "RollingFile",
        "Args": {
          "pathFormat": "log-{Hour}.txt",
          "fileSizeLimitBytes": "",
          "retainedFileCountLimit": "",
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Application}] [{Level}] [{RequestId}] - {Message}{NewLine}{Exception}"
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
    "Properties": {
      "Application": "MultilayerApp"
    }
},
Run Code Online (Sandbox Code Playgroud)

在日志中,我们有很好的输入

2018-01-19 14:06:01.165 +00:00 [App] [Warning] [0HLAV6PIMA9M0:00000001] - Accessing expired session, Key:"6e7f3ab5-db62-335d-1bc7-6824e5b918f5"
Run Code Online (Sandbox Code Playgroud)

但我的问题是Serilog在哪里实现更丰富RequestId?老实说,我找不到它.

logging serilog asp.net-core asp.net-core-logging

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

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直接写日志到elasticsearch是个好主意吗

我正在评估有关分布式日志服务器的不同选项。

在Java世界,我看到的最流行的方案是filebeat + kafka + logstash + elasticsearch + kibana。

但是,在 .NET 世界中,有一个 serilog 可以将结构日志直接发送到 elasticsearch。所以唯一需要的组件是elasticsearch + kibana。

我搜索了很多,但是关于这个解决方案在生产中的信息并不多。我不知道它是否足以处理大量日志。

谁能给我一些建议?谢谢。

elasticsearch serilog elastic-stack

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

将用户名添加到Serilog中

我在program.cs中有这个Serilog配置

public class Program
    {
        public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
            .Build();

        public static void Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
                .MinimumLevel.Override("System", LogEventLevel.Warning)
                .WriteTo.MSSqlServer(Configuration.GetConnectionString("DefaultConnection"), "dbo.Log")
                .Enrich.WithThreadId()
                .Enrich.WithProperty("Version", "1.0.0")
                .CreateLogger();
            try
            {
                BuildWebHost(args).Run();
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Host terminated unexpectedly");
            }
            finally
            {
                Log.CloseAndFlush();
            }

        }

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

现在我想添加HttpContext.Current.User.Identity.Name …

logging serilog asp.net-core

7
推荐指数
5
解决办法
2517
查看次数

Serilog JSON config LoggingLevelSwitch access

Configuring Serilog using a JSON config, it is possible to configure log level switches as such:

"LevelSwitches": {
  "$appLogLevel": "Debug",
  "$netLogLevel": "Information",
  "$sysLogLevel": "Error"
},
"MinimumLevel": {
  "ControlledBy": "$appLogLevel",
  "Override": {
    "Microsoft": "$netLogLevel",
    "System": "$sysLogLevel"
  }
}
Run Code Online (Sandbox Code Playgroud)

the purpose of the switches (when instantiated in code) is to be accessed at a later time in order to change the minimum log levels during run-time. However when configured via the JSON config, I can't find a way to access those switch …

serilog asp.net-core-2.1 .net-core-2.1

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

Serilog无法从asp.net Core 2.2 API中的配置工作

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>();
}


public class Startup
{
    public IContainer Container { get; private set; }
    public Startup(IConfiguration configuration)
    {
        Log.Warning("test");
        Configuration = configuration;
    }

}
Run Code Online (Sandbox Code Playgroud)

appsettings.json

{
    "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Default": "Information",
        "Microsoft": "Information",
        "System": "Information"
      }
    },
    "WriteTo": [

      {
        "Name": "RollingFile",
        "Args": {
          "pathFormat": "C:\\test.txt",
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.ffff}|{TenantName}|{RequestId}|{SourceContext}|{Level:u3}|{Message:lj}{NewLine}{Exception}",
          "restrictedToMinimumLevel": …
Run Code Online (Sandbox Code Playgroud)

c# serilog asp.net-core

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

使用 Serilog mssqlserver 接收器自动删除旧日志条目?

Serilog mssqlserver 接收器是否有内置配置设置来自动删除早于特定天数(或周或月)的日志条目?基本上,我正在寻找相当于rollinginterval设置的数据库,但它只是删除旧记录而不是滚动到新的日志文件。

如果没有的话,就不用解释如何用SQL删除记录了;我只是在 Serilog 中寻找捷径。

sql-server serilog

7
推荐指数
0
解决办法
1475
查看次数

有没有办法通过 appsettings.json 设置 Serilog 格式化程序变量?

我有以下appsettings.json配置:

{
    "Serilog": {
        "Using": [],
        "MinimumLevel": {
            "Default": "Information",
            "Override": {
                "Microsoft": "Warning",
                "System": "Warning"
            }
        },
        "Enrich": [ "FromLogContext", "WithMachineName" ],
        "WriteTo": [
            {
                "Name": "File",
                "Args": {
                    "path": "C:\\Logs\\log.json",
                    "formatter": "Serilog.Formatting.Elasticsearch.ElasticsearchJsonFormatter, Serilog.Formatting.Elasticsearch"
                }
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试在上面的 appsettings.json 文件中配置的内容将在 C# 中表示为如下所示:

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .WriteTo.File(new ElasticsearchJsonFormatter(inlineFields:true, renderMessageTemplate: false), @"C:\logs\log.json")
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

我需要将“inlineFields”设置为 true,将“renderMessageTemplate”设置为 false,作为 ElasticsearchJsonFormatter 实例上的 appsettings.json 文件中的覆盖。有没有办法在 appsettings.json 文件中执行此操作,以便我可以将配置排除在 C# 之外?

c# appsettings serilog .net-core

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