NetCore2.x 使用Log4Net(一)
前言:本章仅仅是Log4Net的基本简单的运用,后续章节会按照我的项目使用情况进行深入研究
1.项目搭建
- 新建一个基于.netCore2.x的Web项目 => 过程略
- 给新建项目安装log4net包(NuGet安装 ) => 过程略
2.添加配置文件 log4Net.config
配置文件路径暂时就放在根目录,我怕到时候读取不到(尽量少给自己找事)
2.1 配置文件内容
<?xml version="1.0" encoding="utf-8"?> <configuration><log4net><root><level value="ALL" /><appender-ref ref="RollingFile" /></root><appender name="RollingFile" type="log4net.Appender.RollingFileAppender"><!--文件路径 如果不设置(去掉 value="Log")会默认保存到[App_Data]文件夹中--><param name="File" value="Log"/><!--追加到文件--><param name="AppendToFile" value="true"/><!--最多保留的文件数,设为"-1"则不限--><param name="MaxSizeRollBackups" value="365"/><!--写到一个文件--><param name="StaticLogFileName" value="false"/><!--文件名,按日期命名--><param name="DatePattern" value="yyyyMMdd".log""/><!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--><param name="RollingStyle" value="Date"/><!--日志格式--><layout type="log4net.Layout.PatternLayout"><!--%newline输出的日志会换行 [%date{HH:mm:ss fff}]表示记录的时间 --><conversionPattern value="[%date{HH:mm:ss fff}] %- %message%newline" /><!--如果想自己设置格式就只需要--><!--<conversionPattern value="%message"/>--></layout></appender></log4net> </configuration>
ps:看不懂没关系,先用起来再说,没有直观体验,说了没有用
2.2 注册Log4Net服务
- 实现方式一
这是我看了网上大多数实现方式,是在 Startup.cs 中创建一个静态变量 ,然后在其它类中调用这个静态方法获取Log对象,如下:
public class Startup{public static ILoggerRepository repository { get; set; }public Startup(IConfiguration configuration){Configuration = configuration;repository = LogManager.CreateRepository("NETCoreRepository");// 指定配置文件XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));}}public class HomeController : Controller{private ILog log;public HomeController(IHostingEnvironment hostingEnv){this.log = LogManager.GetLogger(Startup.repository.Name, typeof(HomeController));}public IActionResult Index(){log.Error("测试日志");return View();}}
ps: 我在想,既然都在使用netcore 为啥不将 ILog 注入的服务中,构造函数注入直接获得呢。其实最大的可能就是在获取 Log实例的时候传入一个参数 typeof(HomeController),请移驾到该博客
https://blog.csdn.net/lixwjava/article/details/45950559
在我的项目中,会对写日志进行二次封装,对输出格式会有一定规定,所以,我会将Log 直接注入service中,如何封装将在后续博客中详细分析。
- 实现方式二
在 Startup.cs 文件的 ConfigureServices 方法中添加代码,结果如下
public void ConfigureServices(IServiceCollection services){services.Configure<CookiePolicyOptions>(options =>{// This lambda determines whether user consent for non-essential cookies is needed for a given request.options.CheckConsentNeeded = context => true;options.MinimumSameSitePolicy = SameSiteMode.None;});var repository = LogManager.CreateRepository("NETCoreLogRepository");XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));services.AddSingleton<ILog>(LogManager.GetLogger(repository.Name, typeof(Startup)));}
创建分为三步:
a.创建一个Log4Net 仓库 repository
b.指定该仓库的配置文件路径
c.创建一个Log 实例 注入到 Service中
2.2 使用方法
项目中需要写日志的地方直接构造函数注入,代码如下:
public class HomeController : Controller{public readonly ILog _log;public HomeController(ILog log){_log = log;_log.Info("This is Info Info");}}
以上,最简单的使用方式。下篇将介绍如何根据不同日志等级写入不同的文件中。
后记:后来想了一想,其实我们可以在将 ILoggerRepository 注入到services中而不是将ILog注入,在使用的地方就可以动态指定typeof,以便跟踪对象,反正就是不想用静态变量,如下:
public void ConfigureServices(IServiceCollection services){services.Configure<CookiePolicyOptions>(options =>{// This lambda determines whether user consent for non-essential cookies is needed for a given request.options.CheckConsentNeeded = context => true;options.MinimumSameSitePolicy = SameSiteMode.None;});var repository = LogManager.CreateRepository("NETCoreLogRepository");XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));services.AddSingleton<ILoggerRepository>(repository));}public class HomeController : Controller{public readonly ILog _log;public HomeController(ILoggerRepository repository){ _log = LogManager.GetLogger(repository.Name,typeof(HomeController));_log.Info("This is Info Info");}}
转载于:https://www.cnblogs.com/NemoWork/p/11330001.html
NetCore2.x 使用Log4Net(一)相关推荐
- Log4Net的控制台,WinForm,WebApplication使用
一.Log4Net的控制台,WinForm,WebApplication使用 1.首先使用nuget 添加log4Net 到控制台项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L ...
- log4net 配置参数意思
二) Appenders Appenders决定日志输出的方式. Appenders必须实现log4net.Appenders.IAppender接口. Log4net 2 AnsiC ...
- 日志记录组件[Log4net]详细介绍(转)
一 Log4net简介 Log4net是基于.net开发的一款非常著名的记录日志开源组件.他最早是2001年7月由NeoWorks Limited启动的项目,基本的框架源于另外的一个非常著名的姐妹组件 ...
- 在.Net程序中使用log4net记录日志(示例)
log4j是java开发人员所熟悉,他提供了强大的日志记录功能,log4net是为.Net记录日志开发的.使用示例如下(C#): 1.app.config文件 <?xml version=&qu ...
- C#使用log4net记录日志
1.下载 log4net 右键引用,选择 管理NuGet程序包,选择浏览,输入log4net,然后点击下载 2.在App.config中输入内容(不存在自己创建) <?xml version=& ...
- 关于log4net日志写入mysql数据库记录
网上关于log4net日志写入mysql数据库的博客感觉比较少,所以这边搞定之后先过来记录一下. 首先新建个项目,我命名是log4netDemo,然后需要引入两个dll,一个是mysql.dll,一个 ...
- 基于Log4net插件
基本代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using log ...
- .net中日至框架log4net.dll如何使用
首先配置web.config文件 1.添加如下节点 <!--log4net配置 BEGIN--> <configSections> <section name=& ...
- 在ASP.NET MVC中使用Log4Net记录异常日志,出错时导向到静态页
本篇体验在ASP.NET MVC 4中使用Log4Net记录日志. 通过NuGet安装Log4Net. 需求是:当出错时导向到Error.html静态页面,Log4Net记录错误信息. 大致的思路是: ...
最新文章
- Java虚拟机类加载机制
- Google又放大招:高效实时实现视频目标检测 | 技术头条
- 利用stdin stdout stderr及POSIX-linux机制重定向写日志
- 只需两步,Tomcat JVM 参数性能迅速调到最优!
- NeuralRecon:单目视频的实时Coherent 三维重建
- 360浏览器急速模式_国产平台:360安全浏览器扩展使用教程
- 3创建型模式之单例模式
- python3.6.0怎么安装pip_python3.6环境安装+pip环境配置教程图文详解
- 第九篇 - UITextField
- org.apache.hadoop.hive.metastore.api.SerDeInfo; local class incompatible
- Angular里使用createEmbeddedView的单步调试
- jdk8 Function
- 哈工大SCIR Lab | EMNLP 2019 常识信息增强的事件表示学习
- PropertyUtils.copyProperties复制对象失败
- c语言中求tana反函数,反正切函数arctanx的导数是什么
- 原生js用ajax上传图片,关于js ajax上传图片
- excel批量文件改名批量加后缀
- 生日快乐 吉他谱-李雪莱
- 单商户商城系统功能拆解39—分销应用—分销等级
- Python pip源
热门文章
- 多种方法巧妙优化数据库
- C++成员函数指针的另类调用方法
- bash-shell高级编程-变量的赋值
- BUUCTF-WEB:[SUCTF 2019]EasySQL 1
- Python学习之共享引用
- 异常解决(二)-- AttributeError: cannot assign module before Module.__init__() call
- 汇编语言等号=伪指令
- Let’s Build the Tiniest Blockchain In Less Than 50 Lines of Python (Part I)
- 区块链学堂(4):以太坊基本概念及工具Geth、Browser-solidity、Mist
- ipsec ip替换_点到多点ipsec-vpn NAT穿透和固定IP共存