c#使用log4Net配置日志文件

1.# 写一个通用类 LogHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net;namespace WindowsFormsApplication22
{public class LogHelper{static ILog mylog = LogManager.GetLogger(typeof(LogManager));//创建列表,存储日志信息public static List<Record> fatal_list = new List<Record>();public static List<Record> error_list = new List<Record>();public static List<Record> info_list = new List<Record>();public static List<Record> debug_list = new List<Record>();public static List<Record> warning_list = new List<Record>();//报警等级分5 个public static void WriteFitle(object obj){mylog.Fatal(obj);fatal_list.Add(new Record() { Id=fatal_list.Count+1,Name=obj.ToString(),datatime=DateTime.Now});}public static void WriteError(object obj){mylog.Error(obj);error_list.Add(new Record() { Id = error_list.Count, Name = obj.ToString(), datatime = DateTime.Now });}public static void WriteInfo(object obj){mylog.Info(obj);info_list.Add(new Record() { Id = info_list.Count, Name = obj.ToString(), datatime = DateTime.Now });}public static void WriteDebug(object obj){mylog.Debug(obj);debug_list.Add(new Record() { Id=debug_list.Count,Name=obj.ToString(),datatime=DateTime.Now});}public static void WriteWarning(object obj){mylog.Warn(obj);warning_list.Add(new Record() { Id = warning_list.Count, Name = obj.ToString(), datatime = DateTime.Now });}}public class Record{public int Id { get; set; }public string Name { get; set; }public DateTime datatime { get; set; }}
}

2.配置文件信息 App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration><configSections><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /></configSections><log4net><root><level value="DEBUG" /><appender-ref ref="RollingFileAppender" /></root><appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"><file type="log4net.Util.PatternString"  value="Logs\%date{yyyy--MM--dd}.log"/><appendToFile value="true" /><maximumFileSize value="5KB"></maximumFileSize><maxSizeRollBackups values="5"></maxSizeRollBackups><layout type="log4net.Layout.PatternLayout"><conversionPattern value="日志时间:  %date    线程:[%thread]     日志级别:%-5level      记录信息: %message%newline" /></layout></appender></log4net><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" /></startup>
</configuration>

3界面测试 ,首先加载界面配置文件:

  log4net.Config.XmlConfigurator.Configure(); //加载配置文件
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApplication22
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){log4net.Config.XmlConfigurator.Configure(); //加载配置文件LogHelper.WriteFitle("致命错误1");LogHelper.WriteFitle("致命错误2");LogHelper.WriteFitle("致命错误3");LogHelper.WriteFitle("致命错误4");LogHelper.WriteFitle("致命错误5");LogHelper.WriteInfo("普通一条信息1");LogHelper.WriteInfo("普通一条信息2");LogHelper.WriteInfo("普通一条信息3");LogHelper.WriteError("错误信息1");LogHelper.WriteError("错误信息2");LogHelper.WriteError("错误信息3");LogHelper.WriteError("错误信息3");LogHelper.WriteDebug("Debug 输出1");LogHelper.WriteDebug("Debug 输出2");LogHelper.WriteDebug("Debug 输出3");LogHelper.WriteWarning("提示信息1");LogHelper.WriteWarning("提示信息2");LogHelper.WriteWarning("提示信息3");LogHelper.WriteWarning("提示信息4");}private void buttonDebug_Click(object sender, EventArgs e){this.dataGridView1.DataSource = LogHelper.debug_list;}private void buttonWarning_Click(object sender, EventArgs e){this.dataGridView1.DataSource = LogHelper.warning_list;}private void buttonInfo_Click(object sender, EventArgs e){this.dataGridView1.DataSource = LogHelper.info_list;}private void buttonFatals_Click(object sender, EventArgs e){this.dataGridView1.DataSource = LogHelper.fatal_list;}}
}

运行效果:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebSocket 详解:全双工通信的实现与应用

目录 一、什么是 WebSocket&#xff1f;&#xff08;简介&#xff09; 二、为什么需要 WebSocket&#xff1f; 三、HTTP 与 WebSocket 的区别 WebSocket 的劣势 WebSocket 的常见应用场景 WebSocket 握手过程 WebSocket 事件处理和生命周期 一、什么是 WebSocket&#xf…

Qt Ribbon使用实例

采用SARibbon创建简单的ribbon界面 实例代码如下所示&#xff1a; 1、头文件&#xff1a; #pragma once #include <SARibbonBar.h> #include "SARibbonMainWindow.h" class QTextEdit; class SAProjectDemo1 : public SARibbonMainWindow { Q_OBJECT pub…

认识小程序的基本组成结构

1.基本组成结构 2.页面的组成部分 3.json配置文件 4.app.json文件(全局配置文件&#xff09; 5.project.config.json文件 6.sitemap.json文件 7.页面的.json配置文件 通过window节点可以控制小程序的外观

JVM--类加载器

概念 类加载器&#xff1a;只参与加载过程中的字节码获取并加载到内存中的部分&#xff1b;java虚拟机提供给应用程序去实现获取类和接口字节码数据的一种技术&#xff0c;也就是说java虚拟机是允许程序员写代码去获取字节码信息 类加载是加载的第一步&#xff0c;主要有以下三…

51单片机开发:定时器中断

目标&#xff1a;利用定时器中断&#xff0c;每隔1s开启/熄灭LED1灯。 外部中断结构图如下图所示&#xff0c;要使用定时器中断T0&#xff0c;须开启TE0、ET0。&#xff1a; 系统中断号如下图所示&#xff1a;定时器0的中断号为1。 定时器0的工作方式1原理图如下图所示&#x…

Greenplum临时表未清除导致库龄过高处理

1.问题 Greenplum集群segment后台日志报错 2.回收库龄 master上执行 vacuumdb -F -d cxy vacuumdb -F -d template1 vacuumdb -F -d rptdb 3.回收完成后检查 仍然发现segment还是有库龄报警警告信息发出 4.检查 4.1 在master上检查库年龄 SELECT datname, datfrozen…

小程序-视图与逻辑

前言 1. 声明式导航 open-type"switchTab"如果没有写这个&#xff0c;因为是tabBar所以写这个&#xff0c;就无法跳转。路径开始也必须为斜线 open-type"navigate"这个可以不写 现在开始实现后退的效果 现在我们就在list页面里面实现后退 2.编程式导航…

Kotlin开发(六):Kotlin 数据类,密封类与枚举类

引言 想象一下&#xff0c;你是个 Kotlin 开发者&#xff0c;敲着代码忽然发现业务代码中需要一堆冗长的 POJO 类来传递数据。烦得很&#xff1f;别急&#xff0c;Kotlin 贴心的 数据类 能帮你自动生成 equals、hashCode&#xff0c;直接省时省力&#xff01;再想想需要多种状…

games101-作业2

图形管线 Vertex Processing 对顶点进行加工&#xff0c;使其变换到屏幕空间坐标。 Triangle Processing 将加工后的顶点组装成三角形&#xff0c;用于下一步的光栅化。 void rst::rasterizer::draw(pos_buf_id pos_buffer, ind_buf_id ind_buffer, col_buf_id col_buffer, Pr…

Baklib引领企业内容中台建设的新思路与应用案例

内容概要 在数字化转型的浪潮中&#xff0c;内容中台的概念逐渐成为企业实现高效运营的重要基础。内容中台不仅是信息资产的集中管理平台&#xff0c;更是企业在应对快速变化市场需求时的一种敏捷响应机制。通过搭建内容中台&#xff0c;企业能够有效整合各类资源&#xff0c;…

准备知识——旋转机械的频率和振动基础

旋转频率&#xff0c;也称为转速或旋转速率&#xff08;符号ν&#xff0c;小写希腊字母nu&#xff0c;也作n&#xff09;&#xff0c;是物体绕轴旋转的频率。其国际单位制单位是秒的倒数(s −1 )&#xff1b;其他常见测量单位包括赫兹(Hz)、每秒周期数(cps) 和每分钟转数(rpm)…

Java 大视界 -- Java 大数据在生物信息学中的应用与挑战(67)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

【NLP251】NLP RNN 系列网络

NLP251 系列主要记录从NLP基础网络结构到知识图谱的学习 &#xff11;.原理及网络结构 &#xff11;.&#xff11;&#xff32;&#xff2e;&#xff2e; 在Yoshua Bengio论文中( http://proceedings.mlr.press/v28/pascanu13.pdf )证明了梯度求导的一部分环节是一个指数模型…

Unbutu虚拟机+eclipse+CDT编译调试环境搭建

问题1: 安装CDT&#xff0c;直接Help->eclipse Market space-> 搜cdt , install&#xff0c;等待重启即可. 问题2&#xff1a;C变量不识别vector ’could not be resolved 这是库的头文件没加好&#xff0c;右键Properties->C Build->Enviroment&#xff0c;增加…

关于opencv环境搭建问题:由于找不到opencv_worldXXX.dll,无法执行代码,重新安装程序可能会解决此问题

方法一&#xff1a;利用复制黏贴方法 打开opencv文件夹目录找到\opencv\build\x64\vc15\bin 复制该目录下所有文件&#xff0c;找到C:\Windows\System32文件夹&#xff08;注意一定是C盘&#xff09;黏贴至该文件夹重新打开VS。 方法二&#xff1a;直接配置环境 打开opencv文…

OpenEuler学习笔记(十五):在OpenEuler上搭建Java运行环境

一、在OpenEuler上搭建Java运行环境 在OpenEuler上搭建Java运行环境可以通过以下几种常见方式&#xff0c;下面分别介绍基于包管理器安装OpenJDK和手动安装Oracle JDK的步骤。 使用包管理器安装OpenJDK OpenJDK是Java开发工具包的开源实现&#xff0c;在OpenEuler上可以方便…

Flutter_学习记录_基本组件的使用记录

1.TextWidge的常用属性 1.1TextAlign: 文本对齐属性 常用的样式有&#xff1a; TextAlign.center 居中TextAlign.left 左对齐TextAlign.right 有对齐 使用案例&#xff1a; body: Center(child: Text(开启 TextWidget 的旅程吧&#xff0c;珠珠, 开启 TextWidget 的旅程吧&a…

Java面试题2025-并发编程进阶(线程池和并发容器类)

线程池 一、什么是线程池 为什么要使用线程池 在开发中&#xff0c;为了提升效率的操作&#xff0c;我们需要将一些业务采用多线程的方式去执行。 比如有一个比较大的任务&#xff0c;可以将任务分成几块&#xff0c;分别交给几个线程去执行&#xff0c;最终做一个汇总就可…

算法基础学习——二分查找(附带Java模板)

有单调性的数列一定可以使用二分&#xff0c;没有单调性的题目也可能可以使用二分&#xff1b; &#xff08;一&#xff09;整数二分 二分的本质&#xff1a; 在某个整数区间内&#xff0c;存在某种性质使得区间内左半边的数都不满足该性质&#xff1b;而右半边的数都满足该性…

【Redis】List 类型的介绍和常用命令

1. 介绍 Redis 中的 list 相当于顺序表&#xff0c;并且内部更接近于“双端队列”&#xff0c;所以也支持头插和尾插的操作&#xff0c;可以当做队列或者栈来使用&#xff0c;同时也存在下标的概念&#xff0c;不过和 Java 中的下标不同&#xff0c;Redis 支持负数下标&#x…