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文件中,然后根据实际情况做适量修改即可。
第一步:在程序的AssemblyInfo.cs文件最后添加一行代码,使配置针对项目中所有cs文件都适用:

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


第二步:修改App.Config文件,如果没有此文件可以在项目文件中添加配置文件。添加配置信息:

<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
原创粉丝点击