1.背景

  前两天,曾经的一个同事咨询我,怎样将log4net以中间件的形式整合到core里边去。我不假思索的回答,这种问题应该有人做过吧,他说没有。于是,我去博客园搜了下,发现还真没有,全部都是传统.NET那一套,直接LogManager.GetLogger,于是趁着周末有时间,决定调研下这个问题。去巨硬官网快速浏览了下,扩展第三方日志的核心就在于两个接口:ILogger和ILoggerProvider。于是建好解决方案,刷刷刷实现这两个接口,实现差不多了查相关资料时,猛然发现,卧槽,已经有国外同仁实现过了,我尼玛的辛苦写半天,这下彻底垮了。。。

2.切换四路

  本着偷懒、鄙视瞎造轮子/装逼的心态, 直接把解决方案切换到开源实现。实际上顺便看了下第三方实现源码,四路也是一致的,实现那两个接口。

解决方案如下:

包引用如下:

最上边的不多说,第二个别问我,第三个就是core整合log4net的主角。关于这个,得特别说明下,最新版本是2.2.1,但我并没有引用最新的,而是2.1.0,因为目前有些第三方包最新版本引用的原子包是最新的,而上边第二个鬼东东Microsoft.AspNetCore.App这个框架包底层的原子包却并不是,所以如果引用最新的第三方包,很可能会报某个原子包依赖版本不对的错误。解决方案有二:1、哪个包报错,你单独安装哪个原子包的最新版本;2、切换第三方包的版本到较次,找到能够兼容当前Microsoft.AspNetCore.App的实现。解决方案1的问题是,你更新了这个原子包,它的依赖包又出错,你更新了它的依赖的依赖,它的依赖的依赖的依赖又出错。。。所以,方便起见,我直接用了Microsoft.Extensions.Logging.Log4Net.AspNetCore的较低版本。

log4net.config不再截图或上代码,跟以前的德行没啥两样。

接下来,注册log4net:

图中,前两行的作用是过滤掉System和Microsoft开头的命名空间下的组件产生的警告级别一下的日志,实际上主要就是一些框架性日志。第三行便是注册log4net中间件。

接下来新建控制器,注入日志实践下效果:

上图两个红框,上边一个是构造器注入日志接口,下边是调用日志组件记录日志。

好,接下来我们去看看系统产生的日志,先调用:

控制台窗口:

OK,日志已经输出成功,接下来,我们看关键性的输出到文件:

看到没有,日志已经成功经由log4net输出到文件。

3.总结

  感觉没什么好总结的,.net core提供的扩展已经很开放了,虽然log4net目前比较操蛋,但这对咱大部分.NET开发者来说应该都不是事儿。

.netcore 整合 log4net的更多相关文章

  1. 第八节:Asp.Net Core整合Log4net(官方的、微软的两种)

    一. 整合Log4net 1. 简单说明 对于log4net 官方的程序集而言,从2.0.7开始就支持.Net Core了,这里我们采用的是2.0.8,虽然好久没更新了,但不影响使用.Core版本与普 ...

  2. VS2017-NetCore项目整合Log4Net

    1新建NetCore项目,我这里NetCoreSDK版本是2.2.0. 2.进入NuGet程序包官网 : https://www.nuget.org,搜索以下两个包并安装到项目中. Microsoft ...

  3. .NetCore接入Log4Net

    首先接入NuGet包Log4Net 在项目中添加log4net.config文件 Log4Net的级别None>FATAL>ERROR>WARN>INFO>DEBUG&g ...

  4. netcore 使用log4net

    1.Install Install-Package log4net 2. conifg 創建文件:log4net.config <?xml version="1.0" enc ...

  5. .NET Core整合log4net以及全局异常捕获实现2

    Startup代码 public static ILoggerRepository repository { get; set; } public Startup(IConfiguration con ...

  6. .NET Core整合log4net以及全局异常捕获实现

    在使用log4net之前先安装log4net.这里操作很简单,通过nuget下载并安装log4net很方便.如下图. log4net配置 <?xml version="1.0" ...

  7. .Netcore之日志组件Log4net、Nlog性能比较

    转载请注明出处http://www.cnblogs.com/supernebula/p/7506993.html .Netcore之Log4net.Nlog性能比较 最近在写一个开源.netcore ...

  8. netcore中使用log4net日志

    第一.控制台程序中使用log4net  static void Main(string[] args) { ILoggerRepository repository = LoggerManager.C ...

  9. NetCore log4net 集成以及配置日志信息不重复显示或者记录

    NetCore log4net 集成,这是一个很常见而且网上大批大批的博文了,我写这个博文主要是为了记录我在使用过程中的一点小收获,以前在使用的过程中一直没有注意但是其实网上说的不清不楚的问题. 官方 ...

随机推荐

  1. P1099 树网的核

    NOIP 2007 提高第四题. 啊......我还是看了题解才做出来的. 这题乍一看毫无头绪,但是我们spy on一下,暗中观察发现:n才300!随便打暴力水过去啊! 然后,这破题怎么暴力?感觉我的 ...

  2. A1078. Hashing

    The task of this problem is simple: insert a sequence of distinct positive integers into a hash tabl ...

  3. Hessian使用

    ps:以前在项目中用过hessian,但我仅停留在知道这个层面,后面也没有详细了解其中的原理.现在要写简历都不知道怎么写,自己挖的坑,跪着也要填平. Hessian的使用 这里先写下工程中的使用,有个 ...

  4. Linux 防火墙iptables开放特定端口

    1.查看状态:iptables -L -n2.直接编辑:vi /etc/sysconfig/iptables3.端口开放:-A INPUT -m state --state NEW -m tcp -p ...

  5. MySQL5.5登录密码忘记了,怎嘛办?

    1.关闭正在运行的MySQL. 2.打开DOS窗口,转到mysql\bin目录. 3.输入mysqld --skip-grant-    tables回车.如果没有出现提示信息,那就对了. 4.再开一 ...

  6. mysql -- 动态获取结果集(重点)

    注意:语句传值的时候必须是带有@符号的参数,不能是自己的局部变量,一个@叫用户变量,两个@叫做全局变量.用户变量:当前用户的‘’全局变量‘’,用户状态存在时就存在,用户退出时消失. 初始版 delim ...

  7. windows递归复制指定时间后修改过的文件

    因为在拷贝web站点时,也会存在更新,需要定期覆盖新的内容,就是上次覆盖的时间和到这次时间内修改过的文件都复制. 实现命令xcopy xcopy src dest D:\WWW\phpMyAdmin\ ...

  8. Neural Networks and Deep Learning 课程笔记(第四周)深层神经网络(Deep Neural Networks)

    1. 深层神经网络(Deep L-layer neural network ) 2. 前向传播和反向传播(Forward and backward propagation) 3. 总结 4. 深层网络 ...

  9. Ubuntu(16.04.2)学习笔记(一)如何解决dpkg: error processing install-info

    一.服务器安装软件是出现以下的错误信息: www@TinywanAliYun:~$ sudo apt-get install letsencrypt Reading package lists... ...

  10. 八、IIC 接口

    8.1 IIC接口介绍 8.1.1 IIC 总线的概念 I2C总线是由Philips公司开发的一种简单.双向二线制同步串行总线.它只需要两根线即可在连接于总线上的器件之间传送信息. 主器件用于启动总线 ...