将NLog连接并注入到.NET Core控制台应用程序中

编程入门 行业动态 更新时间:2024-10-18 16:52:57
本文介绍了将NLog连接并注入到.NET Core控制台应用程序中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我创建了一个消费者/职位,该职位/职位将在用C#编写的Linux上作为一个进程运行.

I created a consumer/job that I will have running as a process on Linux written in C#.

该过程将:

  • 从RabbitMQ阅读消息
  • 对数据库进行更改
  • 记录所有错误
  • NLog上有关.NET Core的所有文档均位于ASP.NET Core上.当我尝试获取 ILogger 实现时,它返回null.

    All the documentation on NLog about .NET Core are on ASP.NET Core. When I try to get an ILogger implementation, it returns null.

    这里是接线和用法的例外:

    Here is an except of wiring and usage:

    static void ConfigureServices() { string environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); var builder = new ConfigurationBuilder() .SetBasePath(Path.Combine(AppContext.BaseDirectory)) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{environment}.json", optional: true); var services = new ServiceCollection(); Configuration = builder.Build(); [...] services.AddLogging(); ServiceProvider = services.BuildServiceProvider(); var loggerFactory = ServiceProvider.GetService<ILoggerFactory>(); loggerFactory.AddNLog(); } static void Main(string[] args) { ConfigureServices(); var logger = ServiceProvider.GetService<NLog.ILogger>(); logger.Debug("Logging"); [...] }

    不要与环境变量 ASPNETCORE_ENVIRONMENT 混淆;它仅用于确定要使用哪个 appsettings.json .

    Do not be confused with the environment variable ASPNETCORE_ENVIRONMENT; it is used solely to determine which appsettings.json to use.

    我的代码基于此问题报告.

    最后,这些是我目前已安装的软件包.

    Finally, these are the packages I currently have installed.

    <ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.2" /> <PackageReference Include="Microsoft.Extensions.Configuration" Version="1.1.2" /> <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="1.1.2" /> <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.2" /> <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.2" /> <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.1.2" /> <PackageReference Include="NLog" Version="5.0.0-beta09" /> <PackageReference Include="NLog.Extensions.Logging" Version="1.0.0-rtm-beta5" /> <PackageReference Include="Npgsql" Version="3.2.4.1" /> <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="1.1.0" /> </ItemGroup>

    推荐答案

    .NET Core 1控制台应用程序中基于NLog的完整简约示例(基于 NLog.Extensions.Logging 存储库):

    A complete minimalistic example of NLog in a .NET Core 1 console app (based on NLog.Extensions.Logging repository):

    var services = new ServiceCollection(); services.AddLogging(); var provider = services.BuildServiceProvider(); var factory = provider.GetService<ILoggerFactory>(); factory.AddNLog(); factory.ConfigureNLog("nlog.config"); var logger = provider.GetService<ILogger<Program>>(); logger.LogCritical("hello nlog");

    参考文献:

    <ItemGroup> <PackageReference Include="NLog.Extensions.Logging" Version="1.0.0-rtm-beta5" /> <PackageReference Include="Microsoft.Extensions.Configuration" Version="1.1.2" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="1.1.1" /> <PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.2" /> </ItemGroup>

    nlog.config:

    nlog.config:

    <?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="www.nlog-project/schemas/NLog.xsd" xmlns:xsi="www.w3/2001/XMLSchema-instance" internalLogFile="internal-nlog.txt"> <variable name="Layout" value="${longdate}|${level:uppercase=true}|${logger}|${message}"/> <!-- the targets to write to --> <targets> <!-- write logs to file --> <target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log" layout="${Layout}" /> <!-- write to the void aka just remove --> <target xsi:type="Null" name="blackhole" /> </targets> <!-- rules to map from logger name to target --> <rules> <!--All logs, including from Microsoft--> <logger name="*" minlevel="Trace" writeTo="allfile" /> <!--Skip Microsoft logs and so log only own logs--> <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" /> </rules> </nlog>

    更多推荐

    将NLog连接并注入到.NET Core控制台应用程序中

    本文发布于:2023-11-08 07:30:21,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1568732.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:控制台   应用程序   NLog   NET   Core

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!