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

马特·R

我创建了一个使用者/作业,我将在用 C# 编写的 Linux 上作为进程运行。

该过程将:

  1. 从 RabbitMQ 读取消息
  2. 对数据库进行更改
  3. 记录任何错误

NLog 上关于 .NET Core 的所有文档都在 ASP.NET Core 上。当我尝试获取ILogger实现时,它返回 null。

以下是接线和用法的例外:

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使用哪个

我的代码基于此问题报告

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

<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存储库):

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:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/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>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将IConfiguration注入.NET Core 3.0中的Program.cs(控制台应用程序)中

来自分类Dev

将 .NET Core 控制台应用程序转换为自包含应用程序

来自分类Dev

伪造/模拟.Net Core依赖注入控制台应用程序

来自分类Dev

将HttpClient与.NET Core控制台应用程序一起使用

来自分类Dev

.NET Core 3.1控制台应用程序将无法在Windows 7上运行

来自分类Dev

将HttpClient与.NET Core控制台应用程序一起使用

来自分类Dev

.Net Core控制台应用程序-调试失败-与远程端点的连接已终止

来自分类Dev

在.NET Core控制台应用程序中为EF Core DbContext服务错误建立了依赖项注入

来自分类Dev

.Net Core /控制台应用程序/配置/ XML

来自分类Dev

.NET Core 控制台应用程序的实体框架

来自分类Dev

如何允许Windows防火墙通过.NET Core控制台应用程序进行FTP连接?

来自分类Dev

.NET 4.5控制台应用程序中的NLog:未加载配置

来自分类Dev

无法将控制台应用程序连接到应用程序见解

来自分类Dev

将命令行参数传递给 Visual Studio 容器工具中 .NET Core 控制台应用程序的 Docker 调试运行

来自分类Dev

如何在 .Net Core 控制台应用程序中引用 .Net Core 库

来自分类Dev

如何使.net Core 3.1控制台应用程序中的控制台记录器正常工作

来自分类Dev

如何从提供程序(C#.NET Core控制台应用程序)获取Args?

来自分类Dev

在标准 .net 控制台应用程序中使用 .Net Core dll

来自分类Dev

从 .NET Core 控制台应用程序内部将 .NET Framework 控制台应用程序启动到新窗口中

来自分类常见问题

自托管的.NET Core控制台应用程序中的Startup.cs

来自分类Dev

在Mac或Windows上运行.NET Core控制台应用程序

来自分类Dev

.NET Core 3.0控制台应用程序无法读取文件,引发UnauthorizedAccessException

来自分类Dev

启动控制台应用程序时.NET Core 3.0获取无效的runtimeconfig.json

来自分类Dev

.NET Core 3.1控制台应用程序作为Windows服务

来自分类Dev

如何获取.Net Core控制台应用程序.exe文件所在目录的路径?

来自分类Dev

.NET Core控制台应用程序如何部署到Kubernetes?

来自分类Dev

如何在.NET Core控制台应用程序中设置DI容器?

来自分类Dev

在Linux App Service的Docker容器中运行.Net Core控制台应用程序

来自分类Dev

.NET Core DI-在控制台应用程序中处理Singleton服务

Related 相关文章

  1. 1

    将IConfiguration注入.NET Core 3.0中的Program.cs(控制台应用程序)中

  2. 2

    将 .NET Core 控制台应用程序转换为自包含应用程序

  3. 3

    伪造/模拟.Net Core依赖注入控制台应用程序

  4. 4

    将HttpClient与.NET Core控制台应用程序一起使用

  5. 5

    .NET Core 3.1控制台应用程序将无法在Windows 7上运行

  6. 6

    将HttpClient与.NET Core控制台应用程序一起使用

  7. 7

    .Net Core控制台应用程序-调试失败-与远程端点的连接已终止

  8. 8

    在.NET Core控制台应用程序中为EF Core DbContext服务错误建立了依赖项注入

  9. 9

    .Net Core /控制台应用程序/配置/ XML

  10. 10

    .NET Core 控制台应用程序的实体框架

  11. 11

    如何允许Windows防火墙通过.NET Core控制台应用程序进行FTP连接?

  12. 12

    .NET 4.5控制台应用程序中的NLog:未加载配置

  13. 13

    无法将控制台应用程序连接到应用程序见解

  14. 14

    将命令行参数传递给 Visual Studio 容器工具中 .NET Core 控制台应用程序的 Docker 调试运行

  15. 15

    如何在 .Net Core 控制台应用程序中引用 .Net Core 库

  16. 16

    如何使.net Core 3.1控制台应用程序中的控制台记录器正常工作

  17. 17

    如何从提供程序(C#.NET Core控制台应用程序)获取Args?

  18. 18

    在标准 .net 控制台应用程序中使用 .Net Core dll

  19. 19

    从 .NET Core 控制台应用程序内部将 .NET Framework 控制台应用程序启动到新窗口中

  20. 20

    自托管的.NET Core控制台应用程序中的Startup.cs

  21. 21

    在Mac或Windows上运行.NET Core控制台应用程序

  22. 22

    .NET Core 3.0控制台应用程序无法读取文件,引发UnauthorizedAccessException

  23. 23

    启动控制台应用程序时.NET Core 3.0获取无效的runtimeconfig.json

  24. 24

    .NET Core 3.1控制台应用程序作为Windows服务

  25. 25

    如何获取.Net Core控制台应用程序.exe文件所在目录的路径?

  26. 26

    .NET Core控制台应用程序如何部署到Kubernetes?

  27. 27

    如何在.NET Core控制台应用程序中设置DI容器?

  28. 28

    在Linux App Service的Docker容器中运行.Net Core控制台应用程序

  29. 29

    .NET Core DI-在控制台应用程序中处理Singleton服务

热门标签

归档