3_C# 实现VMS客户端——使用log4net 写日志
来源:互联网 发布:linux cp创建文件夹 编辑:程序博客网 时间:2024/06/13 22:46
声明:
- 本博客为原创博客,主要讲述使用C#语言调用服务端SDK方式完成VMS客户端完整功能实现,转载请声明出处。
- 如有技术问题或需交流可直接联系本人邮箱:chuiwenwei@163.com
简述:
- 程序在运行过程中会出现各种各样不可控的问题,那么在运行过程中为了完成对整个程序的把控,最好的方法就是记录运行日志包括异常运行日志和一些调试日志等。log4net是在.Net下运行非常稳定且好部署的写日志动态库,本篇主要简述下log4net的部署和配置参数。博客最后会提供一个简易的Demo供参考。
目录:
- log4Net简介
- log4Net部署
- log4Net参数含义
- log4Net部署Demo参考
1.log4Net简介
- log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的工具。 log4net是Apache软件基金会Apache Logging Services工程的一部分。Apache日志服务工程致力于为程序调试和审计提供跨语言的日志服务。
- 利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中。并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误)、ERROR(一般错误)、WARN(警告)、INFO(一般信息)、DEBUG(调试信息)。
- 要想获取最新版本的log4net组件库可登录官方网站:http://logging.apache.org/log4net/。
2.log4Net部署
- log4Net的使用是通过配置.Net的应用程序配置文件来实现动态写日志到各种目标的工具,这里主要讲述配置输出到本地配置文件中。
- 配置如下,可直接复制粘贴至项目App.Config文件中,然后根据实际情况做适量修改即可。
[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch = true)]
<configuration> <!-- Register a section handler for the log4net section --> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> </configSections> <appSettings> <!-- To enable internal log4net logging specify the following appSettings key --> <!-- <add key="log4net.Internal.Debug" value="true"/> --> </appSettings> <!-- This section contains the log4net configuration settings --> <log4net> <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">---------注释:写入到文件中 <file value="Log/"/> <!-- Example using environment variables in params --> <!-- <file value="${TMP}\log-file.txt" /> --> <!--<sppendToFile value="true" />--> <!-- An alternate output encoding can be specified --> <!-- <encoding value="unicodeFFFE" /> --> <appendToFile value="true"/> <rollingStyle value="Date"/> <param name="MaxSizeRollBackups" value="30"/> <param name="StaticLogFileName" value="false"/> <param name="DatePattern" value=""VMS-["yyyy-MM-dd"].txt""/>------------根据实际情况修改为自己想要的文件名称格式 <StaticLogFileName value="false"/> <!----> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%M] < - %message%newline"/> </layout> <!-- Alternate layout using XML<layout type="log4net.Layout.XMLLayout" /> --> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">---------------注释:写入到控制台程序 <!--<target value="Console.Error" />--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> </layout> </appender> <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> </layout> </appender> <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">----------注释:写入到Windows事件中 <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> </layout> </appender> <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">-------注释:写入到数据库里面 <connectionString value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=EventLog.mdb"/> <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)"/> <parameter> <parameterName value="@log_date"/> <dbType value="String"/> <size value="255"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date"/> </layout> </parameter> <parameter> <parameterName value="@thread"/> <dbType value="String"/> <size value="255"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread"/> </layout> </parameter> <parameter> <parameterName value="@log_level"/> <dbType value="String"/> <size value="50"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level"/> </layout> </parameter> <parameter> <parameterName value="@logger"/> <dbType value="String"/> <size value="255"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger"/> </layout> </parameter> <parameter> <parameterName value="@message"/> <dbType value="String"/> <size value="1024"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message"/> </layout> </parameter> </appender> <!-- Setup the root category, add the appenders and set the default level --> <root> <level value="INFO"/> <!--<appender-ref ref="LogFileAppender" /><appender-ref ref="EventLogAppender" /><appender-ref ref="ConsoleAppender" /> <appender-ref ref="AdoNetAppender_Access" />-->----------------------------注释:此处将上面三种写入目标注释掉了,即不往里面写日志了,此处只保留了将日志信息写入到文件中。 <appender-ref ref="LogFileAppender"/> <appender-ref ref="TraceAppender"/> </root> </log4net></configuration>
第三步:
在项目工程中添加log4net引用,在使用的cs文件标题中创建log4net的实例,然后开始使用其写日志。
private log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
3..log4Net部署Demo参考
- Demo中将会简述使用log4net动态库按照上面的配置写日志信息进日志文件。
Demo配置:
AssemblyInfo文件添加配置:
[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch = true)]
App.Config文件添加log4net配置:
<log4net> <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender,log4net"> <file value="Log/"/> <!-- Example using environment variables in params --> <!-- <file value="${TMP}\log-file.txt" /> --> <!--<sppendToFile value="true" />--> <!-- An alternate output encoding can be specified --> <!-- <encoding value="unicodeFFFE" /> --> <appendToFile value="true"/> <rollingStyle value="Date"/> <param name="MaxSizeRollBackups" value="30"/> <param name="StaticLogFileName" value="false"/> <param name="DatePattern" value=""log4netDemo-["yyyy-MM-dd"].txt""/> <StaticLogFileName value="false"/> <!----> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%M] < - %message%newline"/> </layout> <!-- Alternate layout using XML<layout type="log4net.Layout.XMLLayout" /> --> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <!--<target value="Console.Error" />--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> </layout> </appender> <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> </layout> </appender> <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> </layout> </appender> <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender"> <connectionString value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=EventLog.mdb"/> <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)"/> <parameter> <parameterName value="@log_date"/> <dbType value="String"/> <size value="255"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date"/> </layout> </parameter> <parameter> <parameterName value="@thread"/> <dbType value="String"/> <size value="255"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread"/> </layout> </parameter> <parameter> <parameterName value="@log_level"/> <dbType value="String"/> <size value="50"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level"/> </layout> </parameter> <parameter> <parameterName value="@logger"/> <dbType value="String"/> <size value="255"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger"/> </layout> </parameter> <parameter> <parameterName value="@message"/> <dbType value="String"/> <size value="1024"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message"/> </layout> </parameter> </appender> <!-- Setup the root category, add the appenders and set the default level --> <root> <level value="INFO"/> <!--<appender-ref ref="LogFileAppender" /><appender-ref ref="EventLogAppender" /><appender-ref ref="ConsoleAppender" /> <appender-ref ref="AdoNetAppender_Access" />--> <appender-ref ref="LogFileAppender"/> <appender-ref ref="TraceAppender"/> </root> </log4net>此时他会在根目录下创建一个文件夹名称为:Log,并按照天自动生成一个文件名称,格式为:log4netDemo+日期。
Demo代码:
将log4net动态库放入到根目录下,然后添加log4net引用。
在窗体打开时写Info日志和Error日志。如下所示:
private void Form1_Load(object sender, EventArgs e) { log.Info("测试"); log.Error("测试"); }
Demo效果:
Demo下载地址:http://pan.baidu.com/s/1ntBhOrZ
0 0
- 3_C# 实现VMS客户端——使用log4net 写日志
- 1_C# 实现VMS客户端——调用C++ SDK
- 4_C# 实现VMS客户端——窗体架构设计
- 5_C# 实现VMS客户端——软件架构设计
- 6_C# 实现VMS客户端——代码架构设计
- 9_C# 实现VMS客户端——控件_TextBoxX
- 10_C# 实现VMS客户端——控件_ButtonX
- 11_C# 实现VMS客户端——控件_ComboBoxEx
- 12_C# 实现VMS客户端——控件_ComboItem
- 13_C# 实现VMS客户端——控件_TreeViewEx
- 14_C# 实现VMS客户端——控件_PanelEx
- 15_C# 实现VMS客户端——控件_ListView
- 16_C# 实现VMS客户端——控件_SuperTabControl
- 17_C# 实现VMS客户端——控件_TableLayoutPanel
- 18_C# 实现VMS客户端——控件_ExpanableSplitter
- 19_C# 实现VMS客户端——控件_DateTimePicker
- 20_C# 实现VMS客户端——控件_PictureBox
- 21_C# 实现VMS客户端——控件_CheckBoxX
- 程序的原子性
- Java深入 - Java 流
- Linux如何解决动态库的版本控制
- 非聚集索引结构
- mysql查询字段值为数字
- 3_C# 实现VMS客户端——使用log4net 写日志
- Leetcode之Divide Two Integers
- Ubuntu 12.04 LTS安装VMware Tools:无法找到kernel header path的问题
- Internet路由之路由表查找算法概述-哈希/LC-Trie树/256-way-mtrie树
- JDK相关的知识
- QLocalServer和QLocalSocket单进程和进程通信
- 深入理解ThreadLocal
- android判断网络连接工具类
- 我的开源项目工作进展(8)