log4net使用

news2024/11/24 7:59:47

一. Log4Net简介

  Log4net是从Java中的Log4j迁移过来的一个.Net版的开源日志框架,它的功能很强大,可以将日志分为不同的等级,以不同的格式输出到不同的存储介质中,比如:数据库、txt文件、内存缓冲区、邮件、控制台、ANSI终端、远程接收端等等,我们这里主要介绍最常用的两种:txt文件和数据库。其它的存储介质详见Apache log4net – Apache log4net: Config Examples - Apache log4nethttps://logging.apache.org/log4net/release/config-examples.html        Log4net将日志分为五个级别,分别是: FATAL(致命错误) > ERROR(一般错误) > WARN(警告) > INFO(一般信息) > DEBUG(调试信息),每个级别都对应着一组重载方法进行调用。

  官网地址:http://logging.apache.org/log4net/index.html

  Nuget地址:https://www.nuget.org/packages/log4net/

  Nuget安装:Install-Package log4net

二、使用

2.1下载log4net

 

 2.2添加引用

  2.3添加配置文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<configSections>
		<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
	</configSections>

	<log4net>
		<logger name="loginfo">
			<level value="INFO" />
			<appender-ref ref="InfoAppender" />
		</logger>
		<!--type表示用什么类型记录日志 RollingFileAppender代表用文本来记录日志-->
		<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender,log4net">
			<!--日志文件的保存位置为:log/Log-20210523.txt-->
			<param name="File" value="log\\LogInfo\\"/>
			<!--日志文件名为Log-20210523.txt格式 每天日志分别对应到一个文件中-->
			<param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
			<!--日志文件名,是否固定不变 如果想在文件名称后面加上日期参数,则应为false-->
			<param name="StaticLogFileName" value="false" />
			<!--日志文件为后续内容附加到已有文件(若是false,则为后续覆盖向前的内存)-->
			<param name="AppendToFile" value="true" />
			<!--根据文件的大小和日期滚动文件-->
			<param name="RollingStyle" value="Date" />
			<!--备份文件的个数-->
			<param name="MaxSizeRollBackups" value="100"/>
			<!--如果我们将最大文件大小设置为1MB并将maxSizeRollBackups设置为10 MB,那么根据日期或文件大小,它将只保留最后10MB的文件-->
			<param name="MaximumFileSize" value="1MB" />

			<layout type="log4net.Layout.PatternLayout,log4net">
				<!--日志记录的格式-->
				<!--<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />格式为:时间+[线程]+级别+项目.Controller -messsage+exception.innerMessage-->
				<param name="ConversionPattern" value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 日志描述:%message%newline" />
				<!--格式类似:记录时间:2020-01-15 20:34:37,946 线程ID:[6] 日志级别:DEBUG 出错类:_008Log4Net.Controllers.HomeController property:[(null)] - 错误描述:Hi I am log4net Debug Level-->
			</layout>
		</appender>
		<logger name="logerror">
			<level value="ERROR" />
			<appender-ref ref="RollingLogFileAppender" />
		</logger>
		<!--type表示用什么类型记录日志 RollingFileAppender代表用文本来记录日志-->
		<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
			<!--日志文件的保存位置为:log/Log-20210523.txt-->
			<param name="File" value="log\\LogError\\"/>
			<!--日志文件名为Log-20210523.txt格式 每天日志分别对应到一个文件中-->
			<param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
			<!--日志文件名,是否固定不变 如果想在文件名称后面加上日期参数,则应为false-->
			<param name="StaticLogFileName" value="false" />
			<!--日志文件为后续内容附加到已有文件(若是false,则为后续覆盖向前的内存)-->
			<param name="AppendToFile" value="true" />
			<!--根据文件的大小和日期滚动文件-->
			<param name="RollingStyle" value="Date" />
			<!--备份文件的个数-->
			<param name="MaxSizeRollBackups" value="100"/>
			<!--如果我们将最大文件大小设置为1MB并将maxSizeRollBackups设置为10 MB,那么根据日期或文件大小,它将只保留最后10MB的文件-->
			<param name="MaximumFileSize" value="1MB" />

			<layout type="log4net.Layout.PatternLayout,log4net">
				<!--日志记录的格式-->
				<!--<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />格式为:时间+[线程]+级别+项目.Controller -messsage+exception.innerMessage-->
				<param name="ConversionPattern" value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 错误描述:%message%newline" />
				<!--格式类似:记录时间:2020-01-15 20:34:37,946 线程ID:[6] 日志级别:DEBUG 出错类:_008Log4Net.Controllers.HomeController property:[(null)] - 错误描述:Hi I am log4net Debug Level-->
			</layout>
		</appender>
	</log4net>
</configuration>

2.4程序启动时读取log4net的配置文件

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

 将配置文件放置该文件下 

2.5日志类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace geoscenepro_automation
{
    public static class LogHelper
    {
        public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");
        public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");

        public static void WriteLog(string info)
        {
            if (loginfo.IsInfoEnabled)
            {
                loginfo.Info(info);
            }
        }
        /// <summary>
        /// 错误记录
        /// </summary>
        /// <param name="info">附加信息</param>
        /// <param name="ex">错误</param>
        public static void ErrorLog(string info, Exception ex)
        {
            if (!string.IsNullOrEmpty(info) && ex == null)
            {
                logerror.ErrorFormat("【附加信息】 : {0}<br>", new object[] { info });
            }
            else if (!string.IsNullOrEmpty(info) && ex != null)
            {
                string errorMsg = BeautyErrorMsg(ex);
                logerror.ErrorFormat("【附加信息】 : {0}<br>{1}", new object[] { info, errorMsg });
            }
            else if (string.IsNullOrEmpty(info) && ex != null)
            {
                string errorMsg = BeautyErrorMsg(ex);
                logerror.Error(errorMsg);
            }
        }
        /// <summary>
        /// 美化错误信息
        /// </summary>
        /// <param name="ex">异常</param>
        /// <returns>错误信息</returns>
        private static string BeautyErrorMsg(Exception ex)
        {
            string errorMsg = string.Format("【异常类型】:{0} <br>【异常信息】:{1} <br>【堆栈调用】:{2}", new object[] { ex.GetType().Name, ex.Message, ex.StackTrace });
            errorMsg = errorMsg.Replace("\r\n", "<br>");
            errorMsg = errorMsg.Replace("位置", "<strong style=\"color:red\">位置</strong>");
            return errorMsg;
        }
    }

}

2.6运行

 尝试添加按钮进行日志文件书写

   2.7结果

 三、示例链接

四、参考

log4net使用中loginfo.IsInfoEnabled=false问题解决方法_ChaoYang0502的博客-CSDN博客

Log4Net日志详解_zhanglong_longlong的博客-CSDN博客

C#中实现日志记录功能_c# 日志_微笑&星空的博客-CSDN博客

log4net使用中loginfo.IsInfoEnabled=false问题解决方法_zwm_16的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/880428.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

02.用户信息UserDetails相关入门

1. 前言 前一篇介绍了 Spring Security 入门的基础准备。从这篇开始我们来一步步窥探它是如何工作的。我们又该如何驾驭它。本篇将通过 Spring Boot 2.x 来讲解 Spring Security 中的用户主体UserDetails。以及从中找点乐子。 2. Spring Boot 集成 Spring Security 这个简直…

同比增长近4倍!5G智能座舱爆发

5G智能座舱&#xff0c;正在进入爆发期。 高工智能汽车研究院监测数据显示&#xff0c;2023年1-6月中国市场&#xff08;不含进出口&#xff09;乘用车前装标配5G智能座舱交付63.18万辆&#xff08;含选装&#xff09;&#xff0c;同比增长370.09%。 同时&#xff0c;5G与车载智…

透镜天线的分类、特点及龙伯球透镜天线原理

透镜天线&#xff0c;一种能够通过电磁波&#xff0c;将点源或线源的球面波或柱面波转换为平面波从而获得笔形、扇形或其他形状波束的天线。通过合适设计透镜表面形状和折射率n&#xff0c;调节电磁波的相速以获得辐射口径上的平面波前。透镜天线吸收了许多光信息工程技术&…

蓝牙资讯|苹果智能戒指可以通过多个戒指控制用户界面

近日&#xff0c;美国专利商标局公布了苹果公司的一项专利申请&#xff0c;涉及使用单个或多个智能指环来控制用户界面的各个方面。Apple Vision Pro 使用眼动追踪和摄像头来监控用户手指的空中手势控制 visionOS&#xff0c;就像鼠标使用 Mac 一样&#xff0c;戒指专利有一个明…

问道管理:三大股指触底反弹 AI算力方向再度崛起

周一&#xff0c;受人民币汇率动摇等要素影响&#xff0c;A股三大股指早盘深度回撤&#xff0c;沪指盘中创出1月中旬以来新低。午间休市前后&#xff0c;券商与人工智能板块相继发力&#xff0c;带动股指止跌回升&#xff0c;大盘终究以全天的相对高点报收。 截至14日收盘&…

【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡)

微服务技术一 技术栈图一、注册中心Eureka概念&#xff1a;搭建EurekaServer服务注册服务发现&#xff08;消费者对提供者的远程调用&#xff09; 二、Ribbon负载均衡负载均衡的原理&#xff1a;LoadBalanced负载均衡的策略&#xff1a;IRule懒加载 三、Nacos注册中心Nacos的安…

国内芯片厂商创新突破,助力国产替代持续加速

近日&#xff0c;中商产业研究院发布最新研究报告显示&#xff0c;今年1~5月份中国进口集成电路为1865亿件&#xff0c;同比下降19.6%&#xff0c;同比去年5个月累计少进口了455亿颗&#xff0c;平均每天少进口3亿颗。与此同时&#xff0c;英特尔、AMD、美光、三星、SK海力士等…

面试题解析 | 为什么Redis使用单线程性能会优于多线程?

大家好&#xff0c;我是小米&#xff01;今天我要和大家聊一个有关Redis的热门面试题&#xff1a;为什么Redis使用单线程性能会优于多线程&#xff1f;相信这个问题在很多同学心中都曾经纠结过&#xff0c;那么接下来&#xff0c;就让我们一起来揭开这个技术之谜吧&#xff01;…

flac格式如何转mp3?简单的音频格式转换方法分享

FLAC格式音频的缺点主要在于文件大小较大&#xff0c;相比于MP3和AAC等有损压缩格式&#xff0c;FLAC的压缩率较低&#xff0c;因此占用的存储空间更多。此外&#xff0c;由于FLAC格式相对较新&#xff0c;不是所有的音频设备都支持该格式。那么我们怎么将FLAC格式音频转成MP3格…

python质检工具(pylint)安装使用总结

1、Pylint Pylint工具主要类似java中的checkStyle和findbugs,是检查代码样式和逻辑规范的工具。 1.1、Pylint安装流程: 打开PyCharm软件,打开如图1.1所示Terminal终端窗口,先查看python版本和pip版本,pip是19.0.3,python是2.7 图1.1 运行pip install pylint安装pylin…

2023全球创见者大会|企企通总架构师杨华:基于SRM的电子发票解决方案, 破局企业开票困局

01、2023全球创见者大会 2023年8月8日&#xff0c;金蝶30周年庆典&2023全球创见者大会在深圳国际会展中心隆重举行。现场吸引了4000与会来宾齐聚一堂&#xff0c;超过100位演讲嘉宾组成豪华阵容&#xff0c;举办16场行业峰会&#xff0c;呈现了一场数字化领域备受瞩目…

PCIe接口的PCB布局布线要求

PCI-Express&#xff0c;简称“PCI-e”是一种高速串行计算机扩展总线标准&#xff0c;PCI-E属于高速串行点对点双通道高带宽传输&#xff0c;所连接的设备分配独享通道带宽&#xff0c;不共享总线带宽&#xff0c;它的主要优势就是数据传输速率高。 PCI-E2.0和PCI-E3.0主要存在…

国家唯一认证的祛斑产品,安全好用温和的一款

国家唯一认证的祛斑产品露卡菲娅祛斑套装效果好么&#xff1f;对于减少肌肤暗沉&#xff0c;美白祛斑&#xff0c;这是护肤界经久不衰的话题。拥有白嫩无瑕的肌肤&#xff0c;整个人的气质也是会提高很多&#xff0c;所以在追求美白的道路上&#xff0c;我们一直执着追求&#…

Unity ARFoundation 配置工程 (Android)

注意&#xff1a; 1、AR Core是Google的产品&#xff0c;因为谷歌制裁华为&#xff0c;所以 有些 华为机可能不支持AR Core的软件&#xff1b; 2、手机在设置里搜索Google Play&#xff0c;看看是否已经安装上了&#xff0c;如果没有装此服务&#xff0c;去商城里搜索Google Pl…

使用Docker搭建MySQL主从复制(一主一从)

Docker安装MySQL docker pull mysql:5.7 docker images mysql安装步骤 1.新建主服务器容器实例3307 docker run -p 3307:3306 --name mysql-master -v /usr/local/docker/mysql5.7/data/mysql-master/logs:/var/log/mysql -v /usr/local/docker/mysql5.7/data/mysql-master/…

Java # 类加载子系统

一、概述 1、 类加载器子系统负责从文件系统或者网络中加载.Class文件 2、classloader只负责类的加载&#xff0c;至于他是否能够运行由执行引擎来决定 3、加载的类的信息会存放在方法区&#xff08;元空间&#xff09;中 二、加载过程 ​​​​​​​ 1、加载阶段 1、通…

Docker Desktop - WSL kernel version too low

win10命令行运行 wsl --update 如果报启动docker还是报网络连接错误&#xff0c;命令行执行以下命令并重启 netsh winsock reset

PackageNotFoundError: No package metadata was found for bitsandbytes解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

ESLint是什么?

ESLint 介绍 ESLint 是一款插件&#xff0c;主要用来检测编写的&#xff08; JavaScript &#xff09;代码是否符合规范。当然在一个团队中也会自定义一些规范条件。另外正常情况下我们不需要单独安装 ESLint 去使用&#xff0c;这里只是为了做演示。例如 vue-cli 脚手架搭建的…

CSS自学框架之表单

首先我们看一下表单样式&#xff0c;下面共有5张截图 一、CSS代码 /*表单*/fieldset{border: none;margin-bottom: 2em;}fieldset > *{ margin-bottom: 1em }fieldset:last-child{ margin-bottom: 0 }fieldset legend{ margin: 0 0 1em }/* legend标签是CSS中用于定义…