.NetCore之log4net的使用

news/2024/4/15 14:57:57

1.首先下载log4ne的包:
在这里插入图片描述
2.添加配置文件log4net.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration><!-- This section contains the log4net configuration settings --><log4net><appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender"><!--日志输入路径--><file value="ErrorLog/" /><!--日志是否追加到文件--><appendToFile value="true" /><!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])--><rollingStyle value="Composite" /><!--是否只写到一个文件中--><staticLogFileName value="false" /><!--防止多线程时不能写Log,官方说线程非安全--><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><!--按日期命名文件--><datePattern value="yyyyMMdd'.log'" /><!--最多产生文件数超过的话保留最新--><maxSizeRollBackups value="100" /><!--每个文件的大小。只在混合方式与文件大小方式下使用。超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志--><maximumFileSize value="50MB" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date  [%thread]  %-5level  %message%newline" /><header value="&#xA;----------------------header--------------------------&#xA;" /><footer value="&#xA;----------------------footer--------------------------&#xA;"/></layout><!--定义日志级别根据不同的级别调用不同的配置写入--><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="Error" /><param name="LevelMax" value="Error" /></filter></appender><appender name="DeBugLogFileAppender" type="log4net.Appender.RollingFileAppender"><!--日志输入路径--><file value="DeBugLog/" /><!--日志是否追加到文件--><appendToFile value="true" /><!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])--><rollingStyle value="Composite" /><!--是否只写到一个文件中--><staticLogFileName value="false" /><!--防止多线程时不能写Log,官方说线程非安全--><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><!--按日期命名文件--><datePattern value="yyyyMMdd'.log'" /><!--最多产生文件数超过的话保留最新--><maxSizeRollBackups value="100" /><!--每个文件的大小。只在混合方式与文件大小方式下使用。超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志--><maximumFileSize value="50MB" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date  [%thread]  %-5level  %message%newline" /><header value="&#xA;----------------------header--------------------------&#xA;" /><footer value="&#xA;----------------------footer--------------------------&#xA;"/></layout><!--定义日志级别根据不同的级别调用不同的配置写入--><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="DeBug" /><param name="LevelMax" value="DeBug" /></filter></appender><!-- Setup the root category, add the appenders and set the default level --><root><level value="All" /><appender-ref ref="ErrorLogFileAppender" /><appender-ref ref="DeBugLogFileAppender" /></root></log4net>
</configuration>

3.添加日志帮助类

using log4net.Config;
using log4net;namespace CodeIdentify
{public class LoggerHelper{private ILog logger;public LoggerHelper(){if (logger == null){var repository = LogManager.CreateRepository("NETCoreRepository");//log4net从log4net.config文件中读取配置信息XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));logger = LogManager.GetLogger(repository.Name, "Logger");}}/// <summary>/// Debug日志/// </summary>/// <param name="data">调试数据</param>public void Debug(object data){logger.Debug(data);}/// <summary>/// 普通日志/// </summary>/// <param name="controller">控制器</param>/// <param name="exception">catch异常信息</param>public void Info(string controller, Exception exception = null){if (exception == null)logger.Info(controller);elselogger.Info(controller, exception);}/// <summary>/// 告警日志/// </summary>/// <param name="controller"></param>/// <param name="exception"></param>public void Warn(string controller, Exception exception = null){if (exception == null)logger.Warn(controller);elselogger.Warn(controller, exception);}/// <summary>/// 错误日志/// </summary>/// <param name="controller"></param>/// <param name="exception"></param>public void Error(string controller, Exception exception = null){if (exception == null)logger.Error(controller);elselogger.Error(controller, exception);}}}

4.在服务中采用单例生命周期注入

builder.Services.AddSingleton(typeof(LoggerHelper));

5.添加全局异常过滤器

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Net;namespace CodeIdentify
{public class GlobalExceptionFilter : IExceptionFilter{private readonly LoggerHelper  _loggerHelper;public GlobalExceptionFilter(LoggerHelper loggerHelper){_loggerHelper= loggerHelper;}public void OnException(ExceptionContext context){var exception = context.Exception;_loggerHelper.Error(context.HttpContext.Request.Method, exception);context.ExceptionHandled = true; // 标记已处理异常}}
}

6.注入过滤器服务

builder.Services.AddControllers(options =>
{options.Filters.Add<GlobalExceptionFilter>();
});

7.使用

using CodeIdentify.Servers;
using Microsoft.AspNetCore.Mvc;namespace CodeIdentify.Controllers
{[Route("api/[controller]")][ApiController]public class CodeIdentityController : ControllerBase{private readonly IBaiDuCodeIdentity _baiDuCodeIdentity;public CodeIdentityController(IBaiDuCodeIdentity baiDuCodeIdentity) {_baiDuCodeIdentity = baiDuCodeIdentity;}[HttpPost]public async Task<IActionResult> GetCode([FromBody] string url) {if(string.IsNullOrWhiteSpace(url)) throw new ArgumentNullException(nameof(url));return Ok();} }
}

日志截图:
在这里插入图片描述


http://www.ppmy.cn/news/1065696.html

相关文章

字节实习后端面试总结(C++/GO)

语言 C ++, Python 哪一个更快? 答:这个我不知道从哪方面说,就是 C + + 的话,它其实能够提供开发者非常多的权限,就是说它能涉及到一些操作系统级别的一些操作,速度应该挺快。然后 Python 实现功能还是蛮快的。 补充: 一般而言,C++更快一些,因为它是一种编译型语…

<八> objectARX开发:动态拖动Jig创建自定义实体

1、介绍 接上一篇文章,在某些情况下,CAD中的实体对象初始参数并不是固定的,我们需要通过jig动态拖动方式来绘制自定义实体,下面就用一个简单的例子来介绍一下自定义实体动态绘制。   实体形状:包括实体夹点和文字夹点拖动实现。 2、效果 3、源码 static void RYMyGrou…

【网络安全】理解报文加密、数字签名能解决的实际问题

文章目录 前言1. 防止报文泄露 —— 加密体系的出现1.1 理解非对称加密体系的实施难点1.2 加密体系的实际应用 2. 防止报文被篡改 —— 数字签名的出现2.1 数字签名的原理2.2 数字签名的实施难点2.2 数字签名的实际应用 —— 引入摘要算法 3. 实体鉴别 —— CA证书 后记 前言 …

Jmeter(二十八):beanshell的使用

Beanshell 是一种轻量级的 Java 脚本,纯 Java 编写的,能够动态的执行标准 java 语法及一些扩展脚本语法,类似于 javaScript,在工作中可能用的多的就是: Beanshell 取样器:跟Http取样器并列Beanshell前置处理器:一般放在Http请求下,在请求前处理一些数据Beanshell后置处…

硬核旗舰南卡OE CC开放式耳机发布,重新定义百元开放式耳机新标杆!

​随着现在健康意识的不断提高&#xff0c;人们对于日常用品的要求越来越高&#xff0c;在耳机市场中&#xff0c;健康因素也逐渐成为消费者所考虑的因素之一&#xff0c;入耳式耳机因为会引发中耳炎、耳膜炎等疾病&#xff0c;正在逐渐被开放式蓝牙耳机所取代&#xff0c;南卡…

SpringBoot读取application等配置文件时赋默认值

今天遇到个小代码&#xff0c;在使用Value注解读取application配置时&#xff0c;后面多了个:&#xff0c;代码如下&#xff1a; Value("${spring.login.allowedSessions:-1}")private int allowedSession;本来以为是true/false的判断&#xff0c;但是下面给的值却是…

Modbus转Profinet网关在大型自动化仓储项目应用案例

在自动化仓储项目中&#xff0c;Modbus是一种常见的通信协议&#xff0c;用于连接各种设备&#xff0c;例如传感器、PLC和人机界面。然而&#xff0c;Modbus协议只支持串行通信&#xff0c;并且数据传输速度较慢。为了提高通信效率和整体系统性能&#xff0c;许多大型仓储项目选…

C语言练习5(巩固提升)

C语言练习5 选择题 选择题 1&#xff0c;下面代码的结果是&#xff1a;( ) #include <stdio.h> #include <string.h> int main() {char arr[] { b, i, t };printf("%d\n", strlen(arr));return 0; }A.3 B.4 C.随机值 D.5 &#x1f4af;答案解析&#…

linux操作系统的权限的深入学习(未完)

1.Linux权限的概念 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“#”&#xff0c;普通用户…

springboot aop方式实现接口入参校验

一、前言 在实际开发项目中&#xff0c;我们常常需要对接口入参进行校验&#xff0c;如果直接在业务代码中进行校验&#xff0c;则会显得代码非常冗余&#xff0c;也不够优雅&#xff0c;那么我们可以使用aop的方式校验&#xff0c;这样则会显得更优雅。 二、如何实现&#xf…

资料与参考

资料&#xff1a; 本书&#xff08;《Python神经网络编程》&#xff09;的资料是使用Jupyter notebooks写的&#xff0c;本人并不擅长使用Jupyter&#xff0c;所以用传统py重写了一遍&#xff0c;并附加了新功能&#xff08;即多数字识别&#xff09;&#xff0c;现将Jupyter版…

一文便知 GO 中mongodb 的安装与使用

MONGDB 安装与使用 咱们来回顾一下上次分享的内容&#xff1a; 如何使用log 包log 包原理和具体实现自定义日志 要是对 GO 的日志包还有点兴趣的话&#xff0c;可以查看文章 GO的日志怎么玩 ? 今天咱们来玩个简单的 mongodb 的安装和使用 MONGODB介绍 MongoDB 是一个基于…

PyCharm软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 PyCharm是一种集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门为Python开发者设计。它是由捷克软件公司JetBrains开发的&#xff0c;为Python开发人员提供了高效、易用和功能丰富的工具集。 以下是PyCharm软件的主要…

Linux安装jdk、mysql、并部署Springboot项目

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;Linux、环境安装、JDK安装、MySQL、MySQL安装☀️每日 一言&#xff1a;知行合一&#xff01; 文章目录 一、前言二、安装步骤2.1 安装JDK&#xff08;1&#xff09;创建文件夹&#xff08;便于后…

比较重合点的排斥能

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由5张二值化的图片组成&#xff0c;让A中有2个1&#xff0c;B中有1个1&#xff0c;有一个点重合&#xff0c;排列组合&#xff0c;统计迭代次数并排序。 得到数据 构造平均列A 构造平均列…

MySQL—MySQL主从如何保证强一致性

一、前言 涉及到的东西&#xff1a;两阶段提交&#xff0c;binlog三种格式 1、两阶段提交 在持久化 redo log 和 binlog 这两份日志的时候&#xff0c;如果出现半成功的状态&#xff0c;就会造成主从环境的数据不一致性。这是因为 redo log 影响主库的数据&#xff0c;binlog…

第七章,相似矩阵及其应用,2-实对称矩阵之相似对角化

第七章&#xff0c;相似矩阵及其应用&#xff0c;2-实对称矩阵之相似对角化 实对称矩阵的性质实对称矩阵对角化定理对称矩阵对角化步骤 玩转线性代数(35)实对称矩阵之相似对角化的笔记&#xff0c;相关证明以及例子见原文 实对称矩阵的性质 实对称矩阵在特征值与特征向量方面有…

c++学习 之 函数重载注意事项

文章目录 引用作为函数重载的条件函数重载遇到默认参数 引用作为函数重载的条件 #include <iostream> using namespace std; void fun(int &a) {cout << "void fun(int & a)" << endl; }void fun(const int &a) {cout << "…

VB|基础语法 变量定义 函数定义 循环语句 IF判断语句等

文章目录 变量定义函数定义控制台输入输出switch case语句IF语句FOR循环语句不等于逻辑运算符 变量定义 int Dim 变量名 As Int32 0 string Dim 变量名 As String "" bool Dim 变量名 As Boolean False 枚举 Dim 变量名 As 枚举名 数组 Dim array(256) As String…

001微信小程序云开发 API数据库-导入/导出

文章目录 微信小程序云开发 API数据库-导入案例代码微信小程序云开发API数据库-导出案例代码 微信小程序云开发 API数据库-导入 随着移动互联网的普及&#xff0c;微信小程序已经成为一种受欢迎的应用形式。微信小程序云开发 API 数据库是微信小程序的一项重要功能&#xff0c…
最新文章