当前位置: 首页 > news >正文

如何在 ASP.NET Core 3.1 应用程序中使用 Log4Net

介绍

 
日志记录是应用程序的核心。它对于调试和故障排除以及应用程序的流畅性非常重要。

借助日志记录,我们可以对本地系统进行端到端的可视性,而对于基于云的系统,我们只能提供一小部分可视性。您可以将日志写入磁盘或数据库中的文件,并发送错误电子邮件。
 

为 Log4Net 安装 NuGet 包


要使用 Log4Net 日志记录,首先需要添加 Log4Net 插件。要添加插件,您可以通过两种不同的方式进行。
  1. 管理 NuGet 包。
  2. NuGet 命令。
您可以在下面找到 Log4Net 所需的 NuGet 命令。  

PM> Install-Package log4net -Version 2.0.8  

或者,您可以 Microsoft.Extensions.Logging.Log4Net.AspNetCore 

更新启动文件

 
我们需要将Log4Net中间件注册到启动配置部分,如下所示:

public void Configure(IApplicationBuilder app,  
    IHostingEnvironment env, ILoggerFactory loggerFactory)  
{  
    loggerFactory.AddLog4Net();  
}   

添加 log4net.config 文件


我们需要点击“添加新”来向您的项目添加一个名为log4net.config的文件。  

请参阅以下 log4net.config 代码日志文件。

<log4net>  
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">  
    <lockingmodel type="log4net.Appender.FileAppender+MinimalLock">  
    <file value="logs/">  
    <datepattern value="yyyy-MM-dd hh.'txt'">  
    <staticlogfilename value="false">  
    <appendtofile value="true">  
    <rollingstyle value="Composite">  
    <maxsizerollbackups value="2">  
    <maximumfilesize value="15MB">  
    <layout type="log4net.Layout.PatternLayout">  
      <conversionpattern value="%level  %message  %date">  
    </conversionpattern></layout>  
  </maximumfilesize></maxsizerollbackups></rollingstyle></appendtofile></staticlogfilename></datepattern></file></lockingmodel></appender>  
  <root>  
    <level value="ALL">  
    <appender-ref ref="RollingLogFileAppender">  
  </appender-ref></level></root>  
</log4net>   

Root 在 log4net.config 中是必需的,我们可以在其中定义日志级别和 appender-ref 来定义附加程序。例如 - FileAppender、ConsoleAppender。

<root>  
    <level value="ALL">  
    <appender-ref ref="RollingLogFileAppender">  
</appender-ref></level></root>  

布局

在布局中,我们可以定义自定义参数,如下所示。

<layout type="log4net.Layout.PatternLayout">  
      <conversionpattern value="%level  %message  %date">  
</conversionpattern></layout>   

日志级别


共有 7 个日志记录级别。

  • 关闭-不记录任何内容(无法调用)
  • 致命的
  • 错误
  • 警告
  • 信息
  • 调试
  • ALL-所有内容都会被记录(无法调用)

不同的 Appender

  • 滚动文件附加器 - 它写入输出窗口或命令窗口。
  • 文件附加器-此附加器将写入文本文件。
  • ADO.NET Appender-此附加器将写入数据库。
  • 控制台附加器 - 此附加器执行与文件附加器相同的功能,但附加了仅在启动新日志文件之前存储一定量数据的选项。

Log4Net 的日志管理器

public static class Logger  
    {  
       
     private static readonly string LOG_CONFIG_FILE = @"log4net.config";  
       
     private static readonly log4net.ILog _log = GetLogger(typeof(Logger));  
       
     public static ILog GetLogger(Type type)  
     {  
         return LogManager.GetLogger(type);  
     }  
     
     public static void Debug(object message)  
     {  
         SetLog4NetConfiguration();  
         _log.Debug(message);  
     }  
   
   private static void SetLog4NetConfiguration()  
     {  
         XmlDocument log4netConfig = new XmlDocument();  
         log4netConfig.Load(File.OpenRead(LOG_CONFIG_FILE));  
   
         var repo = LogManager.CreateRepository(  
             Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));  
   
         log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);  
     }  

加载并读取 Log4Net 配置文件


您需要将配置文件命名为程序集名称,并且需要具有您指定的扩展名。以下是示例。 

Private static void SetLog4NetConfiguration()  
        {  
            XmlDocument log4netConfig = new XmlDocument();  
            log4netConfig.Load(File.OpenRead(LOG_CONFIG_FILE));  
   
            var repo = LogManager.CreateRepository(  
                Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));  
   
            log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);  
        }   

参考开源地址:GitHub - huorswords/Microsoft.Extensions.Logging.Log4Net.AspNetCore: Allows to configure Log4net as Microsoft Extensions Logging handler on any ASP.NET Core application. Original code proposal by @anuraj --> https://dotnetthoughts.net/how-to-use-log4net-with-aspnetcore-for-logging/

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关文章:

如何在 ASP.NET Core 3.1 应用程序中使用 Log4Net

介绍 日志记录是应用程序的核心。它对于调试和故障排除以及应用程序的流畅性非常重要。 借助日志记录&#xff0c;我们可以对本地系统进行端到端的可视性&#xff0c;而对于基于云的系统&#xff0c;我们只能提供一小部分可视性。您可以将日志写入磁盘或数据库中的文件&#xf…...

Photoshop提示错误弹窗dll缺失是什么原因?要怎么解决?

Photoshop提示错误弹窗“DLL缺失”&#xff1a;原因分析与解决方案 在创意设计与图像处理领域&#xff0c;Photoshop无疑是众多专业人士和爱好者的首选工具。然而&#xff0c;在使用Photoshop的过程中&#xff0c;有时会遇到一些令人头疼的问题&#xff0c;比如突然弹出的错误…...

mall-admin-web开源项目搭建教程(图文)

本章教程,介绍如何在本地部署运行mall-admin-web这个开源项目。 开源地址:https://gitee.com/macrozheng/mall-admin-web mall-admin-web是一个电商后台管理系统的前端项目,基于Vue+Element实现。主要包括商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计…...

nginx做为文件服务器

docker-compose 创建nginx version: 3services:nginx-web:image: nginx:1.23.4container_name: nginx-webenvironment:# 时区上海TZ: Asia/Shanghaiports:- "88:80"- "443:443"volumes:# 证书映射- /home/dockerdata/nginx/cert:/etc/nginx/cert# 配置文件…...

加速合并,音频与字幕的探讨

因上一节。合并时速度太慢了。显卡没用上。所以想快一点。1分钟的视频用了5分钟。 在合并视频时,进度条中的 now=None 通常表示当前处理的时间点没有被正确记录或显示。这可能是由于 moviepy 的内部实现细节或配置问题。为了加快视频合并速度并利用 GPU 加速,可以采取以下措…...

(3)spring security - 认识PasswordEncoder

目录 1.简介1.1.简单了解认证流程 2.密码验证3.PasswordEncoder的内置实现4.小结 目标&#xff1a; 简单了解认证的流程简单认识spring security中的Password Encoder 1.简介 还是以这幅图为基础&#xff0c;认识Password Encoder到底是什么&#xff1f; 1.1.简单了解认证流程…...

React 入门:JSX语法详解

简介 React是一个用于构建用户界面的JavaScript库&#xff0c;它引入了JSX语法&#xff0c;使得你可以在JavaScript代码中编写类似HTML的结构。JSX在编译后会被转换成合法的JavaScript对象。 JSX基础 JSX是一种看起来像HTML的JavaScript语法扩展。它并不直接被浏览器执行&am…...

Pandas常见函数

Pandas 是 Python 中用于数据分析和处理的强大工具库。以下是 Pandas 中一些常见的函数和方法&#xff0c;按用途分类总结&#xff1a; 1. 数据创建 pd.Series(data, index)&#xff1a;创建一维的序列对象。pd.DataFrame(data, index, columns)&#xff1a;创建二维的DataFra…...

【笔试】亚马逊

亚马逊的笔试题目有两道&#xff0c;一共70分钟 1.给一个数组代表每轮损失的血量power&#xff0c;另外一个变量是盾牌armor&#xff0c;可以选择任意一轮使用这个盾牌&#xff0c;可以抵挡min&#xff08;power[i],armor&#xff09;的攻击&#xff0c;请问最小血量是多少能够…...

【力扣算法】234.回文链表

快慢指针&#xff1a;一个指针走两步&#xff0c;一个指针走一步&#xff0c;当快指针走到链表末尾时&#xff0c;慢指针走到中间位置。 逆转链表&#xff1a;根据指针位置分成两个表&#xff0c;逆转第二个表。 按序判断就可以&#xff0c;如果是相同就是回文&#xff0c;反之…...

vue3-tp8-Element:对话框实现

效果 参考框架 Dialog 对话框 | Element Plus 具体实现 一、建立view页面 /src/views/TestView.vue 二、将路径写入路由 /src/router/index.js import { createRouter, createWebHistory } from vue-router import HomeView from ../views/HomeView.vueconst router create…...

35、Firefly_rk3399 同步互斥

文章目录 1、简述问题2、原子操作&#xff08;atomic_ops &#xff09;指令解析&#xff1a; 3、锁函数说明3.1、自旋锁API例子 3.2、信号量&#xff08;semaphore&#xff09;API例子 3.3、互斥量/锁API例子 3.4、信号量和互斥锁的区别 4、锁的内核实现4.1、自旋锁&#xff08…...

Docker-Dockerfile、registry

Dockerfile 一、概述 1、commit的局限 很容易制作简单的镜像&#xff0c;但碰到复杂的情况就十分不方便&#xff0c;例如碰到下面的情况&#xff1a; 需要设置默认的启动命令需要设置环境变量需要指定镜像开放某些特定的端口 2、Dockerfile是什么 Dockerfile是一种更强大的镜…...

chattts生成的音频与字幕修改完善,每段字幕对应不同颜色的视频,准备下一步插入视频。

上一节中&#xff0c;实现了先生成一个固定背景的与音频长度一致的视频&#xff0c;然后插入字幕。再合并成一个视频的方法。 但是&#xff1a;这样有点单了&#xff0c;所以&#xff1a; 1.根据字幕的长度先生成视频片断 2.在片段上加上字幕。 3.合并所有片断&#xff0c;…...

8、笔记本品牌分类介绍:LG - 计算机硬件品牌系列文章

LG笔记本品牌以其高性能和先进技术而闻名&#xff0c;‌提供多种型号以满足不同用户的需求。‌ LG笔记本产品线包括多种类型&#xff0c;‌以满足不同用户的需求。‌其中&#xff0c;‌LG Gram Pro系列以其超薄设计和高性能配置受到关注。‌该系列笔记本采用16:10的OLED显示屏&…...

在 Vue 2 中隐藏页面元素的方法

目录 在 Vue 2 中隐藏页面元素的方法 引言 1. 使用 v-if 指令 2. 使用 v-show 指令 3. 使用自定义类名与 v-bind:class 4. 使用内联样式与 v-bind:style 5. 使用组件的 keep-alive 和条件渲染 在 Vue 2 中隐藏页面元素的方法 引言 在开发 Web 应用时&#xff0c;我们经…...

基于springboot+vue的高校校园交友交流平台设计和实现

文章目录 系统功能部分实现截图 前台模块实现管理员模块实现 项目相关文件架构设计 MVC的设计模式基于B/S的架构技术栈 具体功能模块设计系统需求分析 可行性分析 系统测试为什么我&#xff1f; 关于我项目开发案例我自己的网站 源码获取&#xff1a; 系统功能 校园交友平台…...

Redis是什么?Redis和MongoDB的区别在那里?

Redis介绍 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、基于内存的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。以下是关于Redis的详细介绍&#xff1a; 一、数据结构支持 字符串&#xff08;String&#xff09; 这是Redis最…...

《开源时间序列数据:探索与应用》

《开源时间序列数据&#xff1a;探索与应用》 一、开源时间序列数据概述二、热门的开源时间序列数据库1. InfluxDB2. TimescaleDB3. Prometheus4. OpenTSDB5. Graphite6. Druid 三、开源时间序列数据的应用场景1. 物联网领域2. 金融领域3. 运维监控领域4. 能源领域 四、开源时间…...

Java后端面试场景题汇总

1.50 亿数据如何去重&排序? 如此大的数据集进行去重(例如50亿数据条目),我们需要考虑内存和存储空间的限制,同时还需要有一个高效的算法。一般来说,这样的数据量无法直接载入内存进行处理,因此需要采用磁盘存储和分布式处理的技术。主要有以下几种思路: 外部排序…...

方法引用和lambda表达式的奥妙

方法引用替代Lambda表达式 什么情况可以使用方法引用替代lambda表达式&#xff1f; 下面代码中两处使用了lambda表达式&#xff0c;一个是filter内&#xff0c;一个是forEach内。其中&#xff0c;forEach内的lambda表达式可以被方法引用替代&#xff0c;但是filter内的lambda…...

AI 智能名片 S2B2C 商城小程序在社群团购运营中的作用与价值

摘要&#xff1a;本文深入探讨了 AI 智能名片 S2B2C 商城小程序在社群团购运营中的重要作用。随着社群团购的兴起&#xff0c;如何有效运营成为关键问题。AI 智能名片 S2B2C 商城小程序凭借其独特功能&#xff0c;能够在促进消费者互动、提升产品传播效果、影响购买决策以及实现…...

设计模式の建造者适配器桥接模式

文章目录 前言一、建造者模式二、适配器模式2.1、对象适配器2.2、接口适配器 三、桥接模式 前言 本篇是关于设计模式中建造者模式、适配器模式&#xff08;3种&#xff09;、以及桥接模式的笔记。 一、建造者模式 建造者模式是属于创建型设计模式&#xff0c;通过一步步构建一个…...

.net framework手动升级到.net core注意点

因为项目原因&#xff0c;还使用着比较原始的 .NETFramework框架&#xff0c;但因为某种原因&#xff0c;暂时不让升级到.NET 6。为了能够解锁更多 VisualStudio2022的功能&#xff0c;尝试手动修改 csproj文件。 这个过程中&#xff0c;也会遇到不少坑&#xff0c;再次做个记…...

排队论、负载均衡和任务调度关系

目录 排队论、负载均衡和任务调度关系 一、排队论 二、负载均衡 三、任务调度 四、总结 排队论、负载均衡和任务调度关系 排队论为负载均衡和任务调度提供了数学理论和方法支持 排队论、负载均衡和任务调度是三个相关但不同的概念。以下是对这三个概念的详细解释和它们之…...

【C++图论】1042. 不邻接植花|1712

本文涉及知识点 C图论 LeetCode1042. 不邻接植花 有 n 个花园&#xff0c;按从 1 到 n 标记。另有数组 paths &#xff0c;其中 paths[i] [xi, yi] 描述了花园 xi 到花园 yi 的双向路径。在每个花园中&#xff0c;你打算种下四种花之一。 另外&#xff0c;所有花园 最多 有…...

AI开源南京分享会回顾录

AI 开源南京分享会&#xff0c;已于2024年11月30日下午在国浩律师&#xff08;南京&#xff09;事务所5楼会议厅成功举办。此次活动由 KCC南京、PowerData、RISC-Verse 联合主办&#xff0c;国浩律师&#xff08;南京&#xff09;事务所协办。 活动以“开源视角的 AI 对话”为主…...

Java版-图论-最短路-Floyd算法

实现描述 网络延迟时间示例 根据上面提示&#xff0c;可以计算出&#xff0c;最大有100个点&#xff0c;最大耗时为100*wi,即最大的耗时为10000&#xff0c;任何耗时计算出来超过这个值可以理解为不可达了&#xff1b;从而得出实现代码里面的&#xff1a; int maxTime 10005…...

ChatGPT大模型 创作高质量文案的使用教程和案例

引言 随着人工智能技术的飞速发展,大语言模型如 ChatGPT 在创作文案、生成内容方面展现出了强大的能力。无论是个人用户还是企业用户,都可以利用 ChatGPT 提高工作效率、激发创意、甚至解决实际问题。本文将详细介绍 ChatGPT 如何帮助创作各类高质量文案,并通过具体案例展示…...

SQL注入及解决

SQL注入是一种常见的网络攻击方式&#xff0c;攻击者通过在输入字段中插入恶意的SQL代码&#xff0c;诱使应用程序执行攻击者构造的SQL语句&#xff0c;从而达到非法获取数据、篡改数据或执行恶意操作的目的。 以下是SQL注入的主要原理总结&#xff1a; 1. 核心原理 SQL注入…...

uni-app多环境配置动态修改

前言 这篇文章主要介绍uniapp在Hbuilderx 中&#xff0c;通过工程化&#xff0c;区分不同环境、动态修改小程序appid以及自定义条件编译&#xff0c;解决代码发布和运行时手动切换问题。 背景 当我们使用uniapp开发同一个项目发布不同的环境二级路径不同时&#xff0c;这时候…...

EasyPlayer.js播放器如何在iOS上实现低延时直播?

随着流媒体技术的迅速发展&#xff0c;H5流媒体播放器已成为现代网络视频播放的重要工具。其中&#xff0c;EasyPlayer.js播放器作为一款功能强大的H5播放器&#xff0c;凭借其全面的协议支持、多种解码方式以及跨平台兼容性&#xff0c;赢得了广泛的关注和应用。 那么要在iOS上…...

mHand Pro动捕数据手套在人形机器人领域的具体运用

mHandPro是一款高精度的动作捕捉数据手套&#xff0c;可应用于动作捕捉与VR交互等领域&#xff0c;配套”mHand Studio“引擎&#xff0c;可实时捕捉真人手部位姿及运动轨迹数据&#xff0c;将数据导出还可以用于人形机器人的训练加速高精度机器人操作技能的培训进程。 高精度动…...

【css常用动画总结01】

一、效果如下&#xff1a; 屏幕录制2024-11-27 17.28.30 二、css常用动画代码&#xff1a; .flex-box{position: relative; } .animation-all {display: flex;p{margin:0;font-size: 12px;}.animate-test1 {width: 102.4px;height: 102.4px;background: url(../assets/images/…...

从入门到精通:系统化棋牌游戏开发全流程教程

棋牌游戏开发需要丰富的技术知识和全面的规划&#xff0c;从开发环境搭建到实际功能实现&#xff0c;步骤清晰且逻辑严谨。以下是完整教程&#xff0c;涵盖了每个关键环节&#xff0c;并提供相关软件的具体下载地址&#xff0c;助力开发者高效完成棋牌游戏项目。 一、开发环境准…...

MyBatis 框架学习与实践

引言 MyBatis 是一个流行的 Java 持久层框架&#xff0c;它提供了简单的方法来处理数据库中的数据。本文将结合笔记和图片内容&#xff0c;详细讲解 MyBatis 的使用&#xff0c;包括配置、注解、优化技巧以及如何处理特殊字符和参数。 1. MyBatis 基础 1.1 引入依赖 首先&a…...

数据可视化的Python实现

一、GDELT介绍 GDELT ( www.gdeltproject.org ) 每时每刻监控着每个国家的几乎每个角落的 100 多种语言的新闻媒体 -- 印刷的、广播的和web 形式的&#xff0c;识别人员、位置、组织、数量、主题、数据源、情绪、报价、图片和每秒都在推动全球社会的事件&#xff0c;GDELT 为全…...

微信小程序实现联动删除输入验证码框

以下是json代码 {"component": true,"usingComponents": {} }以下是wxml代码 <van-popup show"{{ show }}" bind:close"onClose" custom-class"extract"><image src"../../images/extract/icon1.png"…...

C语言程序设计P6-1【应用指针进行程序设计 | 第一节】——知识要点:指针的概念、定义和运算、指针变量作函数的参数

知识要点&#xff1a;指针的概念、定义和运算、指针变量作函数的参数 视频&#xff1a; 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 输入两个整数&#xff0c;按大小顺序输出&#xff0c;要求用函数处理&#xff0c;而且用指针类型的数据作函数参数…...

C++编程: 基于cpp-httplib和nlohmann/json实现简单的HTTP Server

文章目录 0. 引言1. 完整实例代码2. 关键实现3. 运行与测试 0. 引言 本文基于 cpp-httplib 和 nlohmann/json 实现简单的 HTTPS Server 实例代码&#xff0c;这两个库均是head-only的。 1. 完整实例代码 如下实例程序修改自example/server.cc #include <httplib.h>#i…...

多模态大模型(二)——用Transformer Encoder和Decoder的方法(BLIP、CoCa、BEiTv3)

文章目录 BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 理解、生成我都要&#xff0c;一个很有效的、根据图片生成caption的工具1. BLIP的研究动机2. BLIP的模型结构3. CapFilt Model4. BLIP的训练过程 CoCa: C…...

SpringBoot快速入门

SpringBoot 文章目录 SpringBoot1. Spring Boot 概念2. Spring 使用痛点3. Spring Boot功能4. 快速搭建5. 起步依赖原理6. SpringBoot 配置6.1 配置文件6.2 YAML介绍6.3 YAML语法6.4 YAML数据6.5 YAML参数引用 7.配置数据读取7.1 Value("${}")7.2 Environment7.3 Con…...

Qt编写区位码gb2312、机内码、国标码————附带详细介绍和编码实现

文章目录 0 背景1 了解编码1.1 ASCII码1.2 机内码、国标码、区位码1.2.1 区位码1.2.2 国标码&#xff08;GB 2312-80&#xff09;1.2.3 汉字机内码&#xff08;GB 2312&#xff09; 1.3 GBK和GB2312的区别2 编码实现2.1 QString数据转QByteArray类型2.1.1 使用QTextCodec2.1.2 …...

IDEA 未启用lombok插件的Bug

项目中maven已引用了lombok依赖&#xff0c;之前运行没有问题的&#xff0c;但有时启动会提示&#xff1a; java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy8 Lombok support…...

R语言学习笔记-1

1. 基础操作和函数 清空环境&#xff1a;rm(list ls()) 用于清空当前的R环境。 打印输出&#xff1a;print("Hello, world") 用于输出文本到控制台。 查看已安装包和加载包&#xff1a; search()&#xff1a;查看当前加载的包。install.packages("package_na…...

NFT的公链及开放联盟链信息整理

BSN链 名称内容类型开放联盟链网址https://www.bsnbase.com/节点信息登陆后可免费获取区块链浏览器可查看交易详情使用案例光明艺品、数藏中国、千寻数藏、集集文创、乾坤数藏 至信链 名称内容类型开放联盟链网址https://zxchain.qq.com/节点信息需要登录并充值后获取区块链…...

android notification

前言 在做应用时&#xff0c;时常需要在通知栏显示一条通知&#xff0c;那么具体流程是怎样的呢&#xff0c;怀着这样的探究目的&#xff0c;来进行一步步源码分析。 源码梳理 package com.android.server; ... public final class SystemServer implements Dumpable {...pr…...

C# 多态性

文章目录 前言一、多态性的定义二、C# 中的多态性实现方式1. 方法重写&#xff08;Overriding&#xff09;2. 方法重载&#xff08;Overloading&#xff09;3. 接口实现&#xff08;Interface implementation&#xff09; 三、多态性的优点1. 提高代码的可维护性2. 增强代码的可…...

类与对象以及ES6的继承

认识class定义类 类的声明用的比较多 类与构造函数的异同 类的构造函数 类的实例方法 类的访问器方法 在类里面写拦截方法 类的静态方法 通过类名直接访问 es6类的继承-extends super关键字 子类可以重写父类方法包括父类的静态方法也可以继承父类的静态方法 babel可以将新的代…...

每日一站技術架構解析之-cc手機桌布網

# 網站技術架構解析&#xff1a; ## 一、整體架構概述https://tw.ccwallpaper.com是一個提供手機壁紙、桌布免費下載的網站&#xff0c;其技術架構設計旨在實現高效的圖片資源管理與用戶訪問體驗優化。 ### &#xff08;一&#xff09;前端展示 1. **HTML/CSS/JavaScript基礎構…...