https://www.cnblogs.com/zhangxiaoyong/p/9463791.html

这一篇也不错

.NET常用的日志组件有NLog、Log4net等,.NET CORE下微软也自带了日志组件,到目前为止还没用过,而我本人常用的是log4net,下面简单讲讲.NET CORE下怎么使用log4net记录日志。

新建一个ASP.NET CORE项目,为项目添加log4net程序包,

log4net.config文件配置如下:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- This section contains the log4net configuration settings -->
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Log/" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<staticLogFileName value="false" />
<datePattern value="yyyyMMdd'.log'" />
<maxSizeRollBackups value="" />
<maximumFileSize value="50MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
</layout>
</appender> <!-- Setup the root category, add the appenders and set the default level -->
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root> </log4net>
</configuration>

接下来编写一个记录日志的公共类代码如下:(本人看到有些开发者将ILog对象直接返回,在调用的时候直接调用ILog对象的方法,这样会造成调用的类库中都必须引用log4net类库,很麻烦,像如下封装后调用的地方只需要引用Logger类所在类库即可)

public class Logger
{
private static ILog logger;
static Logger()
{
if (logger == null)
{
var repository = LogManager.CreateRepository("NETCoreRepository");
//log4net从log4net.config文件中读取配置信息
XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
logger = LogManager.GetLogger(repository.Name, "InfoLogger");
}
} /// <summary>
/// 普通日志
/// </summary>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void Info(string message, Exception exception = null)
{
if (exception == null)
logger.Info(message);
else
logger.Info(message, exception);
} /// <summary>
/// 告警日志
/// </summary>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void Warn(string message, Exception exception = null)
{
if (exception == null)
logger.Warn(message);
else
logger.Warn(message, exception);
} /// <summary>
/// 错误日志
/// </summary>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void Error(string message, Exception exception = null)
{
if (exception == null)
logger.Error(message);
else
logger.Error(message, exception);
}
}

接下来就是在任意控制器或者类中使用刚编写的Logger类来记录日志到文件中

 [Produces("application/json")]
[Route("api/Default")]
public class DefaultController : ControllerBase
{
public readonly IOptions<AppSettings> _Setting; public DefaultController(IOptions<AppSettings> _setting)
{
_Setting = _setting;
} public async Task<string> GetAppsetting()
{
string name= _Setting.Value.Name;
string age = _Setting.Value.Age;
Logger.Error(age);//此处调用日志记录函数记录日志
return name + age;
}
}

-- ::,  []  INFO
-- ::, [] ERROR

如果需要限制历史日志文件保存最大数量,请将<rollingStyle value="Composite" />改为:<rollingStyle value="Size" />,此时,maxSizeRollBackups配置才会生效。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- This section contains the log4net configuration settings -->
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Log/" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<staticLogFileName value="false" />
<datePattern value="yyyyMMdd'.log'" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="50MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
</layout>
</appender> <!-- Setup the root category, add the appenders and set the default level -->
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root> </log4net>
</configuration>

注意,如果Logger类中抛出FileNotFoundException异常,说明目录下未找到log4net.config文件,这时请在项目log4net.config文件上右键——属性——将“复制到输出目录”项的值改为“始终复制”即可。

摘自:这里

NetCore下的log4的更多相关文章

  1. .NetCore 下开发独立的(RPL)含有界面的组件包 (六)实现业务功能

    .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...

  2. .NetCore 下开发独立的(RPL)含有界面的组件包 (五)授权过滤参数处理

    .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...

  3. .NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤

    .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...

  4. .NetCore 下开发独立的(RPL)含有界面的组件包 (三)构建界面

    .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...

  5. .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服务

    .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...

  6. .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作

    .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...

  7. NetCore下模拟和使用Modbus工业通信协议

    Tips: 1.目前NetCore下与Modbus通信的框架主要选择了 Modbus.Net  https://github.com/parallelbgls/Modbus.Net 2.modbus是 ...

  8. .netcore下的微服务、容器、运维、自动化发布

    原文:.netcore下的微服务.容器.运维.自动化发布 微服务 1.1     基本概念 1.1.1       什么是微服务? 微服务架构是SOA思想某一种具体实现.是一种将单应用程序作为一套小型 ...

  9. QQ浏览器、搜狗浏览器等兼容模式下,Asp.NetCore下,Cookie、Session失效问题

    原文:QQ浏览器.搜狗浏览器等兼容模式下,Asp.NetCore下,Cookie.Session失效问题 这些狗日的浏览器在兼容模式下,保存Cookie会失败,是因为SameSiteMode默认为La ...

随机推荐

  1. Spring Cloud探路(一) Erueka服务器的建立

    组件名:Netflix Eureka  作用:支撑微服务的自注册.自发现,提供负载均衡能力 开发环境使用IDEA 1.新建Eureka Server,新建maven项目,配置pom.xml <p ...

  2. linux进程简单睡眠

    当一个进程睡眠, 它这样做以期望某些条件在以后会成真. 如我们之前注意到的, 任何睡 眠的进程必须在它再次醒来时检查来确保它在等待的条件真正为真. Linux 内核中睡眠的 最简单方式是一个宏定义, ...

  3. RabbitMQ-工作原理

    使用场景 在我们秒杀抢购商品的时候,系统会提醒我们稍等排队中,而不是像几年前一样页面卡死或报错给用户. 像这种排队结算就用到了消息队列机制,放入通道里面一个一个结算处理,而不是某个时间断突然涌入大批量 ...

  4. 深度解读 - Windows 7核心图形架构细致分析(来自微软)

    编辑:马志文 时间: 2009-12-29 如现在大家所想的那样, Windows7 其实是 Windows Vista 的改进版. Windows 7 在 Windows Vista 的基础上进行了 ...

  5. JS逻辑运算操作

    非! 如果一个操作数是一个对象,返回false; 如果一个操作数是一个空字符串,返回true; 如果一个操作数是一个非空字符串,返回false; 如果一个操作数是一个数值0,返回true; 如果一个操 ...

  6. WPF TreeView 展开到指定节点

    最近在做一个交换机管理的项目,有一个交换机的树,做树的搜索的时候 展开节点居然有点难,自己记录下来 ,以后用的到的时候可以看一下. 展开代码如下,其中 SwitchTree是treeview空间的名称 ...

  7. 2018宁夏邀请赛 L Continuous Intervals(单调栈+线段树)

    2018宁夏邀请赛 L Continuous Intervals(单调栈+线段树) 传送门:https://nanti.jisuanke.com/t/41296 题意: 给一个数列A 问在数列A中有多 ...

  8. Python3_函数参数传递、可变与不可变对象、变量作用域、函数返回值

    参数传递: 在 python 中,类型属于对象,变量是没有类型的:(变量都仅仅是一个对象的引用,没有类型之分)a=[1,2,3] a="Runoob" 以上代码中,[1,2,3] ...

  9. C++引用计数设计与分析(解决垃圾回收问题)

    1.引言 上一篇博文讲到https://www.cnblogs.com/zhaoyixiang/p/12116203.html 我们了解到我们在浅拷贝时对带指针的对象进行拷贝会出现内存泄漏,那C++是 ...

  10. Docker容器Centos容器安装openssh

    前面在部署容器,使用docker容器作为jenkins的Slave节点时,会发现在使用centos作为镜像源拉去容器,不能正常连接,最后是因为centos的sshd的问题 下面专门是centos容器安 ...