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".txt"" /> <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,但是編譯后的文件可能沒有替換。