關於最新版本的log4net使用中遇到的問題


Quartz.NET是一個開源的作業調度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#寫成,可用於winform和asp.net應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執行一個作業而創建簡單的或復雜的調度。它有很多特征,如:數據庫支持,集群,插件,支持cron-like表達式等等。

它的下載地址:http://sourceforge.net/projects/quartznet/files/quartznet/

我們下載了最新版本后,發現它使用的Common.Logging.dll \Common.Logging.Core這二個dll是3.0.0.0版本的,這二個dll是什么作用呢,我簡要概述一下

Common.Logging.dll 通用日志接口

Common.Logging.Core 包含 Common.Logging 低級抽象常見到其他所有的 Common.Logging 軟件包的便攜式 (PCL) 實現。(通俗的講就是幫你實現了讀取配置文件實現你想要的log,比如你想用log4net,直接在配置文件中配置一下,就可以直接在項目中使用,具體的實現由它來幫你完成)。

接下來我們是使用log4net作為日志,這里不要下載最新的版本,因為Common.Logging的版本限制了你使用最新的。這中間為了讓你少走彎路,你直接用程序包管理控制台,輸入

PM>Install-Package Common.Logging.Log4Net1211 -Version 3.0.0,然后程序會自動安裝,包括log4net也會找到適應的版本進行安裝,如果你不是這樣做,會出現各種各樣的問題,最常見的問題是Failed obtaining configuration for Common.Logging from configuration。這個問題一是因為版本不正確,二是因為配置文件,你的配置文件要對應你的dll名稱。

接着配置文件配置一下,就可以實現我們想要的日志管理了。建議大家直接在工具→Nuget程序包管理器→程序包管理器中→輸入Install-Package Common.Logging.Log4Net1211 -Version 3.0.0,這樣做的好處是你不用在擔心各個組件之間的版本問題。最后我把配置文件貼一下。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  <log4net>
    <root>
      <!--控制級別,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
      <!--比如定義級別為INFO,則INFO級別向下的級別,比如DEBUG日志將不會被記錄-->
      <!--如果沒有定義LEVEL的值,則缺省為DEBUG-->
      <level value="ALL" />
      <appender-ref ref="InfoFileAppender" />
      <appender-ref ref="RollingFileAppender" />
      <appender-ref ref="ConsoleAppender" />
    </root>
    <appender name="InfoFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="log/" />
      <appendToFile value="true" />
      <param name="DatePattern" value="yyyyMMdd&quot;.txt&quot;" />
      <rollingStyle value="Date" />
      <maxSizeRollBackups value="100" />
      <maximumFileSize value="1024KB" />
      <staticLogFileName value="false" />
      <Encoding value="UTF-8" />
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="INFO" />
      </filter>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level %logger  - %message%newline" />
      </layout>
    </appender>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Log/" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <!--<datePattern value="yyyyMMdd-HHmm" />-->
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread](%file:%line) %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>

    </appender>
  </log4net>
  <common>
    <logging>
      <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net1211">
        <arg key="configType" value="INLINE" />
        <!-- FILE,FILE-WATCH,INLINE,EXTERNAL 如果要是file 需要指定configFile -->
        <!--<arg key="configFile" value="~/Log4NET.xml"/>-->
      </factoryAdapter>
    </logging>
  </common>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

最后附幾個問題,第一個是Failed obtaining configuration for Common.Logging from configuration section 'common/logging'.出現這個問題是因為Common.Logging.Log4net,你需要把它改為Common.Logging.Log4net1211。第二個問題就是說版本不一致,一般是指loger4net,你看一下你的debug文件夾下的版本,因為你使用了nuget,但是編譯后的文件可能沒有替換。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM