标签: serilog

Serilog topshelf集成无法正常工作

我正在尝试使用Topshelf和Serilog(分别为Serilog.Extras.Topshelf包)为我的Windows服务设置简单的日志配置.

HostLogger.UseLogger(new SerilogHostLoggerConfigurator(new LoggerConfiguration()
                .WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\app-{Date}.log")
                .WriteTo.ColoredConsole()
                .MinimumLevel.Debug()
                .CreateLogger()));
HostFactory.Run(x => {
            x.UseSerilog();
            ...
Run Code Online (Sandbox Code Playgroud)

该服务运行正常,但没有输出,也没有输出到控制台或指定的日志文件(我可以看到正在创建一个但它仍然是空的).有没有人使用这两个框架?

c# logging windows-services topshelf serilog

14
推荐指数
1
解决办法
3423
查看次数

解决错误 - 无法解析"Serilog.ILogger"类型的服务

我试图在ASP.NET核心应用程序(.NET框架)中实现SeriLog

以下是我目前执行的步骤 -

1)在Project.json中添加了以下引用

"Serilog": "2.2.0",
"Serilog.Extensions.Logging": "1.2.0",
"Serilog.Sinks.RollingFile": "2.0.0",
"Serilog.Sinks.File": "3.0.0"
Run Code Online (Sandbox Code Playgroud)

2)在Startup类的构造函数中添加以下行 -

Log.Logger = new LoggerConfiguration()
           .MinimumLevel.Debug()
           .WriteTo.RollingFile(Path.Combine(env.ContentRootPath, "log-{Date}.txt"))
           .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

3)在Startup类的configure方法中添加以下行 -

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

4)将记录器注入HomeController,如下所示 -

ILogger logger;

    public HomeController(ILogger logger)
    {
        this.logger = logger;
    }
Run Code Online (Sandbox Code Playgroud)

5)在About操作中,尝试记录此类异常 -

public IActionResult About()
    {
        ViewData["Message"] = "Your application description page.";

        try
        {
            throw new Exception("Serilog Testing");
        }
        catch (System.Exception ex)
        {
            this.logger.Error(ex.Message);
        }

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

在运行我的应用程序时,我收到以下错误 -

System.InvalidOperationException:尝试激活'AspNetCore_SeriLog_trial1.Controllers.HomeController'时,无法解析类型'Serilog.ILogger'的服务.在Microsoft.AspNetCore.Mvc.Internal.TypeActivatorCache.CreateInstance
[TInstance]的lambda_method(Closure,IServiceProvider,Object [])上的Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp,Type type,Type requiredBy,Boolean isDefaultParameterRequired)IServiceProvider serviceProvider,Type implementationType),位于Microsoft.AspNetCore.Mvc.Inv.Inter.ControllerActionInvoker.d__26的Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerFactory.CreateController(ControllerContext context)中的Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerActivator.Create(ControllerContext controllerContext). .MoveNext()

有人可以帮我这个吗?Serilog缺少任何配置?

serilog asp.net-core-mvc asp.net-core

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

将 Serilog 作为 Microsoft.Extentions.Logging.ILogger 正确注入 .net core 类 - 不是 ASP .Net Core

所以我有一个 .Net Core 控制台应用程序和一堆 .Net core 库。

库中的大多数类都有这样的构造函数。

public class ReportingManager
{
   private ILogger _logger;
   Public ReportingManager(ILogger logger)
   {
      _logger = logger;
   }
}
Run Code Online (Sandbox Code Playgroud)

具有ILogger类型Microsoft.Extentions.Logging.ILogger

在我的控制台应用程序中我有这个。

class Program
{
    static void Main(string[] args)
    {           
            var serilog = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Warning)
                .Enrich.FromLogContext()
                .WriteTo.Console(theme: AnsiConsoleTheme.Code)
                .CreateLogger();

            ReportingManager manager = new ReportingManager(serilog);

    }
}
Run Code Online (Sandbox Code Playgroud)

我在“ReportingManager manager = new ReportingManager(serilog);”处出现智能感知错误

无法从“Serilog.Core.Logger”转换为“Microsoft.Extensions.Logging.ILogger”

所以我的问题是,如何正确传入 Serilog?

在线和此处查看过,但大多数讨论的是 ASP.Net Core。

c# serilog .net-core

14
推荐指数
3
解决办法
2万
查看次数

无法将 Serilog 与 .Net Core 3 IHostBuilder 一起使用

我正在尝试在 .Net Core 项目中使用 Serilog。我有 2 个服务,第一个服务是从 .Net Core 2.2 升级的,在 Program.cs 中它使用 IWebHostBuilder 来启动应用程序。在这里,我创建了记录器并将其作为参数传递给 UseSerilog() ,一切都按预期工作。

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

我的第二个服务是使用 .Net Core 3 模板创建的,它使用 IHostBuilder。当我尝试通过以下任一方式使用 Serilog 时,我会收到相同的错误。

public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
    .UseServiceProviderFactory(new AutofacServiceProviderFactory())
    .ConfigureWebHostDefaults(webBuilder =>
    {
      webBuilder.UseStartup<Startup>()
        .UseSerilog(_logger);
    });
Run Code Online (Sandbox Code Playgroud)

或者

public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
    .UseServiceProviderFactory(new AutofacServiceProviderFactory())
    .ConfigureWebHostDefaults(webBuilder =>
    {
      webBuilder.UseStartup<Startup>();
    })
    .UseSerilog(_logger);
Run Code Online (Sandbox Code Playgroud)

给我这个错误

System.InvalidOperationException:尝试激活“MyService.Startup”时无法解析类型“Microsoft.Extensions.Logging.ILogger`1[MyService.Startup]”的服务。

我发现博客文章支持任一方法,但我认为第二个方法更正确,但两者都不起作用。这是它的链接。另一个博客在这里

serilog .net-core .net-core-3.1

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

如何使用Serilog ForContext

我是Serilog的新手,我很难弄清楚如何使用上下文功能.当我运行下面的代码时,输​​出文件不包含报告ID.我缺少什么想法?

var logger = new LoggerConfiguration()
                .WriteTo
                .File(@"C:\Log.txt")
                .CreateLogger()
                .ForContext("Report ID", 10);

logger.Information("Test"); 
Run Code Online (Sandbox Code Playgroud)

.net logging serilog

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

如何在serilog RollingFile outputTemplate中输出事件源类名?

RollingFile.outputTemplate我使用我在水槽<appSettings>配置如下:

<add key="serilog:write-to:RollingFile.outputTemplate" value="{Timestamp:HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}" />
Run Code Online (Sandbox Code Playgroud)

我得到的输出日志为:

19:55:10 [Information] Application_Start...

但是,我还要输出生成日志的类名(源),如 -

19:55:10 [Information] [Global.asax.cs] Application_Start...

我应该添加什么"价值"?我添加了[Source]但是没有用.

value ="{Timestamp:HH:mm:ss} [{Level}] [Source?] {Message} {NewLine} {Exception}"

serilog

13
推荐指数
1
解决办法
5784
查看次数

使用Serilog和Asp.Net Core时,将用户添加到日志上下文中

我正在尝试将Serilog与我的ASP.Net Core 1.0项目一起使用.我似乎无法将当前登录的用户添加到已记录的属性中.

有没有人想出来呢?

我试过这个:

using System.Threading.Tasks;
using Serilog.Context;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using System.Security.Claims;
using xxx.Models;

namespace xxx.Utils
{
    public class EnrichSerilogContextMiddleware
    {
        private readonly RequestDelegate _next;
        public EnrichSerilogContextMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task Invoke(HttpContext httpContext)
        {

            var username = httpContext.User.Identity.Name;
            if (httpContext.User.Identity.IsAuthenticated)
            {
                var userFullName = (((ClaimsIdentity)httpContext.User.Identity).FindFirst(Member.FullnameClaimName).Value);
                var userName = "anyone@gmail.com";
                LoggerEnricher.AddEntryPointContext(userFullName, userName);
            }
            else
            {
                LoggerEnricher.AddEntryPointContext();
            }


            await _next(httpContext);
        }
    }

    public static class LoggerEnricher

    {
        public static void AddEntryPointContext(string userFullName = null, …
Run Code Online (Sandbox Code Playgroud)

serilog asp.net-core

13
推荐指数
3
解决办法
5464
查看次数

在多个项目中使用Asp.Net Core 2注入Serilog

我为Asp.Net Core 2.0配置了Serilog,它在我的启动Web项目中通过.Net Core依赖注入工作得很好(如果我通过Microsoft.Extensions.Logging使用它),但我无法从任何其他项目访问它.

这就是我所拥有的:

Program.cs中

using System;
using System.IO;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Serilog;

namespace ObApp.Web.Mvc
{
    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()
                .ReadFrom.Configuration(Configuration)
                .CreateLogger();

            try
            {
                Log.Warning("Starting BuildWebHost");

                BuildWebHost(args).Run();
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Host terminated unexpectedly");
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }

        public …
Run Code Online (Sandbox Code Playgroud)

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

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

OpenTracing不会使用Serilog发送日志

我正在尝试将OpenTracing.Contrib.NetCore与Serilog 一起使用。我需要将自定义日志发送给Jaeger。现在,它仅在我使用默认记录器工厂时才有效Microsoft.Extensions.Logging.ILoggerFactory

我的创业公司:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    services.AddSingleton<ITracer>(sp =>
    {
        var loggerFactory = sp.GetRequiredService<ILoggerFactory>();
        string serviceName = sp.GetRequiredService<IHostingEnvironment>().ApplicationName;

        var samplerConfiguration = new Configuration.SamplerConfiguration(loggerFactory)
            .WithType(ConstSampler.Type)
            .WithParam(1);

        var senderConfiguration = new Configuration.SenderConfiguration(loggerFactory)
            .WithAgentHost("localhost")
            .WithAgentPort(6831);

        var reporterConfiguration = new Configuration.ReporterConfiguration(loggerFactory)
            .WithLogSpans(true)
            .WithSender(senderConfiguration);

        var tracer = (Tracer)new Configuration(serviceName, loggerFactory)
            .WithSampler(samplerConfiguration)
            .WithReporter(reporterConfiguration)
            .GetTracer();

        //GlobalTracer.Register(tracer);
        return tracer;
    });
    services.AddOpenTracing();
}
Run Code Online (Sandbox Code Playgroud)

在控制器中的某个位置:

[Route("api/[controller]")]
public class ValuesController : ControllerBase
{
    private readonly ILogger<ValuesController> _logger;

    public ValuesController(ILogger<ValuesController> logger)
    {
        _logger = logger;
    }

    [HttpGet("{id}")] …
Run Code Online (Sandbox Code Playgroud)

c# serilog asp.net-core opentracing jaeger

13
推荐指数
1
解决办法
543
查看次数

ASP.NET Core Windows Service中的Serilog无法将文件写入本地系统

我正在将ASP.NET Core Web服务器作为Windows服务运行,并且正在使用Serilog记录到%PROGRAMDATA%中的文件。当我将服务作为本地系统运行时,没有任何记录。

我正在Windows 10上使用.Net Core 2.2。我正在通过触发服务中的错误来进行测试,该错误会在错误级别写入日志事件。我已经尝试过以自己的管理帐户运行该服务,并且日志记录工作正常;仅当以本地系统运行时,才会出现此问题。

我还有其他使用.Net Framework的Windows服务,它们作为本地系统运行,并且使用Serilog登录到%PROGRAMDATA%没有问题,但这是我第一次在.Net Core上尝试过。我可以使用Directory.CreateDirectory和File.AppendText在服务内手动创建和写入日志文件,并且在作为本地系统运行时可以运行,但是Serilog日志记录则不能。

这是我的Program.Main:

public static async Task Main(string[] args)
{
    var isService = !(Debugger.IsAttached || args.Contains("--console"));       
    if (isService)
    {
        var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
        var pathToContentRoot = Path.GetDirectoryName(pathToExe);
        Directory.SetCurrentDirectory(pathToContentRoot);
    }

    var host = WebHost.CreateDefaultBuilder(args.Where(arg => arg != "--console").ToArray())
        .UseStartup<Startup>()
        .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
            .ReadFrom.Configuration(hostingContext.Configuration)
            .Enrich.FromLogContext())
        .Build();

    // additional async initialization omitted

    if (isService)
    {
        host.RunAsService();
    }
    else
    {
        host.Run();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的appsettings.json的Serilog部分:

"Serilog": {
  "MinimumLevel": {
    "Default": "Verbose",
    "Override": {
      "Microsoft": "Warning",
      "System": …
Run Code Online (Sandbox Code Playgroud)

c# serilog asp.net-core

13
推荐指数
1
解决办法
294
查看次数