前言:本章仅仅是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&quot;.log&quot;"/>
<!--创建日志文件的方式,可选值: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(一)的更多相关文章

  1. Log4net - 规则简介

    参考页面: http://www.yuanjiaocheng.net/CSharp/csharprumenshili.html http://www.yuanjiaocheng.net/entity/ ...

  2. Log4net - 项目使用的一个简单Demo

    参考页面: http://www.yuanjiaocheng.net/entity/entitytypes.html http://www.yuanjiaocheng.net/entity/entit ...

  3. log4net使用手册

    1. log4net简介 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.Java平台下,它还 ...

  4. Log4Net应用问题

    问题 一.日志存储方式 1.txt 2.SQLServer数据库 3.log文件 二.项目类型不同 1winFrom 2webFrom 3MVC 4WPF 5控制台 三.切分依据不同 1.空间大小 2 ...

  5. 在C#代码中应用Log4Net系列教程(附源代码)

    Log4Net应该可以说是DotNet中最流行的开源日志组件了.以前需要苦逼写的日志类,在Log4Net中简单地配置一下就搞定了.没用过Log4Net,真心不知道原来日志组件也可以做得这么灵活,当然这 ...

  6. Log4net入门(帮助类篇)

    在前几篇Log4net入门文件的讲述过程中,我们在使用log4net的类中都要编写如下一行代码: private static log4net.ILog log = log4net.LogManage ...

  7. Log4net入门(WCF篇)

    在上一篇Log4net入门(ASP.NET MVC 5篇)中,我们讲述了如何在ASP.NET MVC 5项目中使用log4net.在这一篇中,我们将讲述如何在WCF应用中使用log4net,为了讲述这 ...

  8. Log4net入门(ASP.NET MVC 5篇)

    在前4篇Log4net入门文章中,我们讲述了log4net的一些简单用法,在这一篇中我们主要讲述如何在ASP.NET MVC 5项目中将日志信息写入SQL Server数据库中. 一.创建最简单的AS ...

  9. Log4net入门(SQL篇)

    我们在Log4net入门(回滚日志篇)中详细讲述了如何将日志信息输出到日志文件中,在这一篇中,我们将讲述如何将日志文件写入SQL Server数据库,以方便我们分析统计日志信息. 首先,我们在SQL ...

随机推荐

  1. PHP多进程开发与Redis结合实践

    原文:https://blog.51cto.com/laok8/2107892?source=drh 业务逻辑介绍: 用户在 APP 上发帖子,然后存储到 Redis 的 List 列表中 利用 Li ...

  2. Appium Desktop 元素定位和脚本录制功能

    Appium Desktop除了可以做Server之外还可以进行元素定位和脚本录制功能,点击放大镜按钮,进入页面设置.开始配置Desired Capabilities. 配置Desired Capab ...

  3. UML期末复习题——2.1:Use Case Diagram

    第一题:用例图 重要概念: 1.采用参与者和参与者目标的观点: 一组用例实例,每个实例是系统所执行的一系列活动,以此产生对特定参与者具有价值的客观结果. 短语“对特定参与者具有价值的客观结果”是细微而 ...

  4. SQL-W3School-高级:SQL JOIN

    ylbtech-SQL-W3School-高级:SQL JOIN 1.返回顶部 1. SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完 ...

  5. python小白之字典使用笔记

    Python 字典(Dictionary)   字典是一种可变容器模型,且可存储任意类型对象. 每个键值 key=>value 对,用冒号 : 分割 每个键值对之间用逗号 , 分割 整个字典包括 ...

  6. CPU分几核几核的是什么意思?

    CPU的几核分类其实是按照CPU的地址总线数量来分类的 单核心的地址总线数量是8条 双核心就是16条 三核心就是24 依次类推,核心的多少,只需要知道地址总线的多少,然后除以8就得出来了 地址总线:地 ...

  7. python flask url参数

    python flask url参数 常见 url 传参中都是 xxx?xxx=xxx 问题来了 flask中我没有找到 关于xx? 问号的使用方式 是不是flask就不支持这种方式 如果有 rout ...

  8. php+mysql模糊查询功能

    一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有 ...

  9. pip使用笔记

    例子: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U funcat -i: 指定库的安装源 -U:升级 原来已经安装的包,不带U ...

  10. java使用新的(nio)遍历文件(支持文件后缀名、文件名正则表达式匹配)

    import org.junit.Test; import java.io.IOException; import java.nio.file.Files; import java.nio.file. ...