C# Winform使用log4net记录日志

写在前面

Log4Net是从Java的log4j移植过来的,功能也与log4j类似,可以把日志信息输出到文件、数据库、控制台、Windows 事件日志、远程系统日志服务等不同的介质或目标。

Log4Net配置选项丰富灵活,并且可在运行时动态更新配置并应用,允许同时推送到多个目标;虽然项目已经休眠了,但是该类库已久经考验,经典的设计永不过时。

获取类库

可通过NuGet获取类库,引入到项目中。

配置模板

新建log4net.xml文件,命名成log4net.config也可以,初始化时保持一致即可,配置内容如下:

<?xml version="1.0" encoding="utf-8"?>
<log4net><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" /></layout></appender><appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" LEVEL="INFO"><!--防止多线程时不能写Log,官方说线程非安全--><param name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" /><param name="File" value="Logs/" /><param name="AppendToFile" value="true"/><param name="StaticLogFileName" value="false" /><param name="DatePattern" value="yyyy-MM-dd.'info.log'" /><param name="RollingStyle" value="Date"/><param name="MaxSizeRollBackups" value="10" /><param name="MaximumFileSize" value="5MB" /><layout type="log4net.Layout.PatternLayout"><param name="ConversionPattern" value="## %d [%t] %-5p %x %m %n"/><!--<param name="ConversionPattern" value="%date [%thread] %-5level [%logger] %ndc - %message%newline" />--></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="INFO" /><param name="LevelMax" value="INFO" /></filter></appender><appender name="ErrorFileAppender" type="log4net.Appender.RollingFileAppender" LEVEL="ERROR"><param name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" /><param name="File" value="Logs/" /><param name="AppendToFile" value="true"/><param name="StaticLogFileName" value="false" /><param name="DatePattern" value="yyyy-MM-dd.'error.log'" /><param name="RollingStyle" value="Date"/><param name="MaxSizeRollBackups" value="10" /><param name="MaximumFileSize" value="5MB" /><layout type="log4net.Layout.PatternLayout"><param name="ConversionPattern" value="%date [%thread] %-5level [%logger] %ndc - %message%newline" /></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="WARN" /><param name="LevelMax" value="ERROR" /></filter></appender><appender name="DebugFileAppender" type="log4net.Appender.RollingFileAppender" LEVEL="ERROR"><param name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" /><param name="File" value="Logs/" /><param name="AppendToFile" value="true"/><param name="StaticLogFileName" value="false" /><param name="DatePattern" value="yyyy-MM-dd.'debug.log'" /><param name="RollingStyle" value="Date"/><param name="MaxSizeRollBackups" value="10" /><param name="MaximumFileSize" value="5MB" /><layout type="log4net.Layout.PatternLayout"><param name="ConversionPattern" value="%date [%thread] %-5level [%logger] %ndc - %message%newline" /></layout><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="DEBUG" /><param name="LevelMax" value="DEBUG" /></filter></appender><root><level value="All" /><appender-ref ref="LogFileAppender" /><appender-ref ref="ErrorFileAppender"/><appender-ref ref="DebugFileAppender" /><appender-ref ref="ConsoleAppender" /></root>
</log4net>

 将文件属性中的“复制到输出目录”配置为始终复制,这样配置文件会同步置执行或发布目录。

 引用并初始化类库

      
static Program()
{//加载log4net配置log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + @"\log4net.xml"));
}

也可以在AssemblyInfo.cs中进行初始化配置

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4Net.xml")] 

 工具类

    public static class LogHelper{public static void Info(object msg, params object[] parameters){var log = LogManager.GetLogger("log4netlogger");log.Info(msg);}public static void Debug(string msg){var log = LogManager.GetLogger("log4netlogger");log.Debug(msg);}public static void Error(string msg){var log = LogManager.GetLogger("log4netlogger");log.Error(msg);}public static void FormatError(string format, params object[] args){var log = LogManager.GetLogger("log4netlogger");log.Error(string.Format(format, args));}public static void Error(Exception ex){var log = LogManager.GetLogger("log4netlogger");log.Error(ex.Message, ex);}public static void Error(object msg, Exception ex){var log = LogManager.GetLogger("log4netlogger");log.Error(msg, ex);}public static void Warn(object msg, Exception ex){var log = LogManager.GetLogger("log4netlogger");log.Warn(msg, ex);}public static void Log(string msg){Info(msg);}public static void Log(Exception ex){Error(ex);}}

调用示例

LogHelper.Info("事件类型出错,类型:" + _rv.EventType + ",参数:" + _rv.EventArgs);LogHelper.Debug(string.Format("action_finish:{0}", TacticsName));LogHelper.Error(string.Format("json序列化失败:{0}", json), ex);

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

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

相关文章

『亚马逊云科技产品测评』活动征文|AWS 存储产品类别及其适用场景详细说明

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 目录 前言、AWS 存储产品类别 1、Amazon Elastic Block Store (EBS) …

ABAP调用Https接口 Ssl证书导入

ABAP调用Https接口 Ssl证书导入 一、证书导入 谷歌浏览器打开对方系统URL地址&#xff0c;下载SSL Server certificate,步骤如下&#xff1a; 浏览器打开要导出certificate(证书)的网站&#xff0c;点击这个小锁的图标&#xff1a; 点击连接是安全的后面小播放按钮 点击证…

千云物流 - 使用k8s负载均衡openelb

openelb的介绍 具体根据官方文档进行安装官方文档,这里作为测试环境的安装使用. OpenELB 是一个开源的云原生负载均衡器实现,可以在基于裸金属服务器、边缘以及虚拟化的 Kubernetes 环境中使用 LoadBalancer 类型的 Service 对外暴露服务。OpenELB 项目最初由 KubeSphere 社区…

创作4周年

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 前言机…

SpringBoot 导入其他配置文件

默认情况下&#xff0c;springboot 初始的项目中都有一个 application.yml 或者 application.properties 文件&#xff0c;如果我们希望再定义一个独立的配置文件用来配置特定业务数据&#xff0c;而不希望把这些配置内容都堆积在 application 配置文件中&#xff0c;实现这个需…

AR道具特效制作工具

AR&#xff08;增强现实&#xff09;技术已经逐渐渗透到各个行业&#xff0c;为企业带来了全新的营销方式和用户体验。在这个背景下&#xff0c;美摄科技凭借其强大的技术实力和创新精神&#xff0c;推出了一款专为企业打造的美摄AR特效制作工具&#xff0c;旨在帮助企业轻松实…

Audition 2024 24.0.0.46(音频剪辑)

Audition 2024是一款非常棒的音频编辑和混合软件&#xff0c;提供了广泛的工具和功能&#xff0c;用于创建、编辑、混合和设计音效。这款软件旨在加速音频和视频制作工作流程&#xff0c;提供具有原始音效的高质量混音。其界面构成清晰&#xff0c;操作简便&#xff0c;适合专业…

section header

section header table 是一个section header的集合&#xff0c;每个section header是一个描述section的结构体。在同一个ELF文件中&#xff0c;每个section header大小是相同的。 每个section都有一个section header描述它&#xff0c;但是一个section header可能在文件中没有…

Selenium切换窗口、框架和弹出框window、ifame、alert

一、切换窗口 #获取打开的多个窗口句柄 windows driver.window_handles #切换到当前最新打开的窗口 driver.switch_to.window(windows[-1]) #最大化浏览器 driver.maximize_window() #刷新当前页面 driver.refresh() 二、切换框架frame 如存在以下网页&#xff1a; <htm…

Navmesh 寻路

用cocos2dx引擎简单实现了一下navmesh的多边形划分&#xff0c;然后基于划分多边形的a*寻路。以及路径拐点优化算法 用cocos主要是方便使用一些渲染接口和定时器。重点是实现的原理。 首先画了一个带有孔洞的多边形 //多边形的顶点数据Vec2(100, 100),Vec2(300, 200),Vec2(50…

Python 2.7 在 Debian 服务器上获取 URL 时的 SSL 验证失败问题与解决方案

在使用Python的requests库从Debian稳定服务器上获取简单URL时&#xff0c;遇到了SSL证书错误。 根据用户的问题描述&#xff0c;您遇到了SSL证书验证失败的问题。 要解决这个问题&#xff0c;您可以采取以下步骤&#xff1a; 1. 升级到Python 2.7的最新版本&#xff1a; 首…

【OpenCV实现图像:使用OpenCV生成拼图效果】

文章目录 概要通用配置不考虑间隔代码实现考虑间隔代码实现小结 概要 概要&#xff1a; 拼图效果是一种将图像切割为相邻正方形并重新排列的艺术效果。在生成拼图效果时&#xff0c;可以考虑不同的模式&#xff0c;包括是否考虑间隔和如何处理不能整除的部分。 不考虑间隔&a…