在.NET Core项目中,日志记录是通过依赖项注入进行管理的。 尽管这对于ASP.NET项目效果很好,但在启动Startup.cs中的新项目时,所有这些都会自动创建,而在控制台应用程序中则需要一些配置才能使其启动并运行。

这大部分是从此处的博客文章整理而成的,但我对其进行了修改。

该项目是在Visual Studio 2019中创建的,并且需要以下程序包(在csproj文件中找到)

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.0" />
</ItemGroup>

该项目中的业务逻辑在服务中得到处理,而Program.cs用于引导运行应用程序所需的一切。 需要在app-settings.json的“ ConnectionStrings”部分中添加一个“Logging”配置,该条目可以像这样添加到控制台应用程序中。

app-settings.json

{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
},
"Console": {
"IncludeScopes": true
}
}
}

Program.cs

  public class Program
{
public static void Main(string[] args)
{
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
var serviceProvider = serviceCollection.BuildServiceProvider();
var run = serviceProvider.GetService<App>();
if (run != null)
run.Run();
else
System.Console.WriteLine("Init Error");
} private static void ConfigureServices(IServiceCollection services)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("app-settings.json", false)
.Build(); services.AddLogging(loggingBuilder =>
{
loggingBuilder.AddConfiguration(configuration.GetSection("Logging"));
loggingBuilder.AddConsole();
loggingBuilder.AddDebug();
}); // Add access to generic IConfigurationRoot
services.AddSingleton(configuration); // Add services
services.AddTransient<IBackupService, BackupService>(); // Add app
services.AddTransient<App>();
}
}

App.cs

   public class App
{
private readonly IBackupService _backupService;
private readonly ILogger<App> _logger;
private readonly IConfigurationRoot _config; public App(ILogger<App> logger, IBackupService backupService, IConfigurationRoot config)
{
_logger = logger;
_backupService = backupService;
_config = config;
} public void Run()
{
_logger.LogInformation($"Running application.");
_backupService.Run();
System.Console.ReadKey(); }
}

BackupService.cs

  public interface IBackupService
{
void Run();
} public class BackupService : IBackupService
{
private readonly ILogger<BackupService> _logger;
private readonly IConfigurationRoot _config; public BackupService(ILogger<BackupService> logger, IConfigurationRoot config)
{
_logger = logger;
_config = config;
} public void Run()
{
_logger.LogDebug($"Running backup service.");
}
}

将日志(Microsoft.Extensions.Logging)添加到.NET Core控制台应用程序的更多相关文章

  1. microsoft.extensions.logging日志组件拓展(保存文本文件)

    Microsoft.Extensions.Logging 日志组件拓展 文件文本日志 文件文本日志UI插件 自定义介质日志 Microsoft.Extensions.Logging.File文件文本日 ...

  2. asp.net core 2.0 Microsoft.Extensions.Logging 文本文件日志扩展

    asp.net core微软官方为日志提供了原生支持,有如下实现 Console Debug EventLog AzureAppServices TraceSource EventSource 并且在 ...

  3. Asp.Net Core 2.0 项目实战(9) 日志记录,基于Nlog或Microsoft.Extensions.Logging的实现及调用实例

    本文目录 1. Net下日志记录 2. NLog的使用     2.1 添加nuget引用NLog.Web.AspNetCore     2.2 配置文件设置     2.3 依赖配置及调用     ...

  4. 微软日志工厂 Microsoft.Extensions.Logging 中增加 log4net 的日志输出

    前提: 需要nuget   Microsoft.Extensions.Logging.Log4Net.AspNetCore   2.2.6: 描述:解决 .net core 微软日志工厂 Micros ...

  5. Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'xxxxx.Controllers.xxxxController'.

    Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activa ...

  6. .NET CORE 控制台应用程序配置log4net日志文件

    使用文件格式记录日志 1.新建一个.NET CORE控制台应用程序,添加log4net.dll引用,打开工具->NuGet包管理器->管理解决方案的NuGet程序包. 2.在NuGet-解 ...

  7. .net core中的那些常用的日志框架(Logging篇)

    前言 日志,在我们每个项目中是必不可少的,它不仅能在调试的时候测试数据,而且在项目上线,也是我们排查错误的得力助手,那我就能谈谈,用的多的几个日志框架吧!如果有不对的地方,欢迎来指教错误,谢谢! As ...

  8. 乘风破浪,遇见最佳跨平台跨终端框架.Net Core/.Net生态 - 官方扩展集锦(Microsoft.Extensions on Nuget)

    什么是Microsoft.Extensions .NET Platform Extensions是一套.Net官方的API集合,提供了一些常用的编程模式和实用工具,例如依赖项注入.日志记录.缓存.Ho ...

  9. MvvmLight + Microsoft.Extensions.DependencyInjection + WpfApp(.NetCore3.1)

    git clone MvvmLight失败,破网络, 就没有直接修改源码的方式来使用了 Nuget安装MvvmLightLibsStd10 使用GalaSoft.MvvmLight.Command命名 ...

随机推荐

  1. java并发编程笔记(八)——死锁

    java并发编程笔记(八)--死锁 死锁发生的必要条件 互斥条件 进程对分配到的资源进行排他性的使用,即在一段时间内只能由一个进程使用,如果有其他进程在请求,只能等待. 请求和保持条件 进程已经保持了 ...

  2. xcodebuild自动打包上传到蒲公英的shell脚本

    注意: ExportOptions.plist (包含了证书相关信息) 该plist 文件可以通过xcode手动导出ipa之后获取到, 区分appstore 和 development的情况 #! / ...

  3. npm run mock | npm run dev只能启动一个

    解决方法: 开两个命令窗口 先运行npm run mock 再运行npm run dev

  4. vue项目中实现手势密码

    思路: 本来应该全部都用canvas来实现的,但时间紧迫 写的时候只想着圆圈用li写,线用canvas,写到一半才想通,还好这一通下来比较顺利 第一步:页面中的9个点用v-for循环出来li,ul设置 ...

  5. vue2.0 项目小总结

    最近做了一个vue的PC端的项目,不大,真正用到vue的东西也不是太多,逻辑处理用到了不少原生js东西. 1.图片渲染 后台返回base64格式数据,一开始绑定src,提示pic字段未定义,懵逼了好久 ...

  6. 在controller的action内, 得到用户发过来的请求地址和参数url

    class PController extends Controller{ public function Log() { echo $_SERVER["HTTP_HOST"] . ...

  7. [FW]使用kprobes查看内核内部信息

    使用printk打印变量等方法,是调试内核的有效方法之一,但是这种方法必须重新构建并用新内核启动,调试效率比较低.以内核模块的方式使用kprobes.jprobes,就可以在任意地址插入侦测器,执行包 ...

  8. 阿里云 消息队列mq

    使用阿里云消息队列 控制台地址:http://ons.console.aliyun.com/#/home/topic Demo: 支付消息mq工厂类: public class DfacePayCon ...

  9. FZU 1876 JinYueTuan(排列组合)

    Description Let’s have a look at the picture below Now, do you know what it’s? Yeah , O(∩_∩)O~ , It ...

  10. dlib 基于摄像流检测眨眼次数

    眼睛纵横比(EAR) 在讨论EAR之前,先看看68个人脸特征点:  人脸特征点检测本身的算法是很复杂的,dlib中给出了相关的实现. 每只眼睛由6个(x,y)坐标表示,从眼睛的左角开始,然后围绕该区域 ...