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");
}
}
NetCore2.x 使用Log4Net(一)的更多相关文章
- Log4net - 规则简介
参考页面: http://www.yuanjiaocheng.net/CSharp/csharprumenshili.html http://www.yuanjiaocheng.net/entity/ ...
- Log4net - 项目使用的一个简单Demo
参考页面: http://www.yuanjiaocheng.net/entity/entitytypes.html http://www.yuanjiaocheng.net/entity/entit ...
- log4net使用手册
1. log4net简介 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.Java平台下,它还 ...
- Log4Net应用问题
问题 一.日志存储方式 1.txt 2.SQLServer数据库 3.log文件 二.项目类型不同 1winFrom 2webFrom 3MVC 4WPF 5控制台 三.切分依据不同 1.空间大小 2 ...
- 在C#代码中应用Log4Net系列教程(附源代码)
Log4Net应该可以说是DotNet中最流行的开源日志组件了.以前需要苦逼写的日志类,在Log4Net中简单地配置一下就搞定了.没用过Log4Net,真心不知道原来日志组件也可以做得这么灵活,当然这 ...
- Log4net入门(帮助类篇)
在前几篇Log4net入门文件的讲述过程中,我们在使用log4net的类中都要编写如下一行代码: private static log4net.ILog log = log4net.LogManage ...
- Log4net入门(WCF篇)
在上一篇Log4net入门(ASP.NET MVC 5篇)中,我们讲述了如何在ASP.NET MVC 5项目中使用log4net.在这一篇中,我们将讲述如何在WCF应用中使用log4net,为了讲述这 ...
- Log4net入门(ASP.NET MVC 5篇)
在前4篇Log4net入门文章中,我们讲述了log4net的一些简单用法,在这一篇中我们主要讲述如何在ASP.NET MVC 5项目中将日志信息写入SQL Server数据库中. 一.创建最简单的AS ...
- Log4net入门(SQL篇)
我们在Log4net入门(回滚日志篇)中详细讲述了如何将日志信息输出到日志文件中,在这一篇中,我们将讲述如何将日志文件写入SQL Server数据库,以方便我们分析统计日志信息. 首先,我们在SQL ...
随机推荐
- C++公有继承,私有继承和保护继承的区别
昨天学习三种继承方式,有些比喻十分形象,特此分享. 首先说明几个术语: 1.基类 基类比起它的继承类是个更加抽象的概念,所描述的范围更大.所以可以看到有些抽象类,他们设计出来就是作为基类所存在的(有些 ...
- mongoose 安装及配置
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方>案.MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据 ...
- FIREDAC返回多结果集
FIREDAC返回多结果集 以前使用ADO, 如果SQL返回的结果集有多个 可以通过NextRecordset来依次获取 代码移植到FireDAC, 对于多结果集处理差不多, 但是还是有一些不一样的地 ...
- Memcache启动停止
启动Memcached root -P /var/run/memcached.pid 1)启动参数说明: -d 选项是启动一个守护进程, -l 是监听的服务器IP地址,默认为所有网卡. -p 是设置M ...
- linux之i2c子系统维护者源码仓库地址
仓库地址: git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git
- 手把手教你实现RecyclerView的下拉刷新和上拉加载更多
手把手教你实现RecyclerView的下拉刷新和上拉加载更多 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...
- Android:cmake开发指南
一.静态库与动态库构建 (.so)共享库,shared object:节省空间,在运行时去连接,如果执行机器上没有这些库文件就不能执行. (.a)静态库,archive:静态库和程序化为一体,不会分开 ...
- Tomcat下配置javaWeb访问路径-Linux
首先找到你的Tomcat的server.xml文件 笔者直接编辑 sudo vi /app/prod/conf/server.xml 访问只需要您的IP地址就可以访问项目了 第二个配置则是访问 ip+ ...
- python 实现对象去重
利用set()方法实现对象去重,重写__hash__方法和__eq__方法告诉程序什么样的对象是同一个对象 # 写一个类 拥有100个对象 # 拥有三个属性 name age sex # 如果两个对象 ...
- 利用Gabor变换法分析纹理图像 matlab代码实现
Gabor变化属于加窗傅里叶变换,Gabor函数可以在频域不同尺度.不同方向上提取相关的特征.Gabor函数与人眼的生物作用相仿,所以经常用于纹理识别上,并取得了较好的效果. 二维Gobor滤波函数: ...