您的位置:首页 > 编程语言 > C#

3_C# 实现VMS客户端——使用log4net 写日志

2014-09-09 13:30 429 查看
声明:

本博客为原创博客,主要讲述使用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




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: