標籤:location encoding datetime files proc led cep splay enc
一、建立一個控制台應用程式
二、使用nuget引用 TopShelf和log4net外掛程式
三、log4net設定檔添加
在根目錄增加log4net.config檔案和logHelper類庫的添加
log4net.config內容如下:
<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <!--資訊日誌配置--> <appender name="InfoLogFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" type="" value="Log\\Info\\" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="20"/> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value="yyyy-MM-dd‘.log‘" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%5p] %c: %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter,log4net"> <levelMin value="INFO" /> <levelMax value="INFO" /> </filter> </appender> <!--錯誤記錄檔配置--> <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" type="" value="Log\\Error\\" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="20"/> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value="yyyy-MM-dd‘.log‘" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%5p] %c: %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter,log4net"> <levelMin value="ERROR" /> <levelMax value="ERROR" /> </filter> </appender> <root> <level value="ALL" /> <appender-ref ref="ErrorLogFileAppender" /> <appender-ref ref="InfoLogFileAppender" /> </root> <logger name="ALL" > <level value="ALL" /> <appender-ref ref="ErrorLogFileAppender"></appender-ref> <appender-ref ref="InfoLogFileAppender"></appender-ref> </logger> </log4net></configuration>
logHelper類庫:
using log4net;using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;namespace WindowsService1{ public class LogHelper { public static ILog GetLog<T>(T t) { ILog _log = LogManager.GetLogger(""); if (t != null) { _log = LogManager.GetLogger(t.GetType()); } return _log; } }}
四、編寫服務功能類【每3秒列印一個日誌】
using log4net;using System;using System.IO;using System.Reflection;using System.Timers;namespace WindowsService1{ public class TestWriteDate { readonly Timer _timer; public TestWriteDate() { _timer = new Timer(3000) { AutoReset = true, Enabled = true }; _timer.Elapsed += delegate (object sender, System.Timers.ElapsedEventArgs e) { LogHelper.GetLog(this).Info(string.Format("DATE: {0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))); LogHelper.GetLog(this).Error("測試出錯!!!", new Exception("dfsafdsafddsafdsa")); try { int i = 0; int j = 10 / i; } catch (Exception ex) { LogHelper.GetLog(this.GetType()).Error(ex.Message, ex); } }; } public void Start() { LogHelper.GetLog(this).Info("開始執行"); } public void Stop() { LogHelper.GetLog(this).Info(string.Format("結束執行") + Environment.NewLine + Environment.NewLine); _timer.AutoReset = false; _timer.Enabled = false; } }}
五、與TopShelf整合
Program.cs的代碼:
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflection;using System.ServiceProcess;using System.Text;using System.Threading.Tasks;using Topshelf;namespace WindowsService1{ static class Program { /// <summary> /// 應用程式的主進入點。 /// </summary> static void Main() { string assemblyFilePath = Assembly.GetExecutingAssembly().Location; string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath); string configFilePath = assemblyDirPath + "\\log4net.config"; log4net.Config.XmlConfigurator.Configure(new FileInfo(configFilePath)); HostFactory.Run(c => { c.Service<TestWriteDate>((x) => { x.ConstructUsing(name => new TestWriteDate()); x.WhenStarted((t) => t.Start()); x.WhenStopped((t) => t.Stop()); }); c.RunAsLocalSystem(); //服務描述 c.SetDescription("TEST_SERVICES"); //服務顯示名稱 c.SetDisplayName("TEST_SERVICES"); //服務的真實名稱 }); } }}
六、服務的安裝與卸載
1、安裝 install.bat
@echo begin...cd /d %~dp0WindowsService1.exe installnet start TEST_SERVICESpause
2、卸載 uninstall.bat
@echo unInstall...cd /d %~dp0WindowsService1.exe uninstallpause
七、源碼
點擊下載
使用Topshelf建立Windows服務,服務中使用log4net記錄日誌