Topshelf 學習 跨平臺 Topshelf是一個開源的跨平臺的宿主服務框架,支持Windows和Mono,只需要幾行代碼就可以構建一個很方便使用的服務宿主。 官網:http://topshelf-project.com GitHub:http://github.com/topshelf/Top ...
Topshelf 學習 跨平臺
Topshelf是一個開源的跨平臺的宿主服務框架,支持Windows和Mono,只需要幾行代碼就可以構建一個很方便使用的服務宿主。
官網:http://topshelf-project.com
GitHub:http://github.com/topshelf/Topshelf
下麵就開始來學習。
創建項目
1.新建一個控制台程式
2.添加引用
我們直接搜索 Topshelf log4net
或者Nuget控制台:Install-Package Topshelf.Log4Net
正常情況下 直接安裝Topshelf 一個就可以了。Log4Net只是為了更好的方便記錄日誌。
3.創建服務
先創建一個類,繼承 ServiceControl 然後實現。
public class SampleService : ServiceControl { LogWriter _log; Timer _timer; public SampleService() { _log = HostLogger.Get<SampleService>(); _timer = new Timer(1000) { AutoReset = true }; _timer.Elapsed += (sender, eventArgs) => _log.Info(DateTime.Now); } public bool Start(HostControl hostControl) { _log.Info("服務啟動"); _timer.Start(); return true; } public bool Stop(HostControl hostControl) { _log.Info("服務停止"); _timer.Stop(); return true; } }
LogWriter 需要using Topshelf.Logging;
4.調用
然後再Main中調用
static void Main(string[] args) { HostFactory.Run(x => { x.UseLog4Net("log4net.config"); x.Service<SampleService>(); x.SetDescription("TopshelfSample說明"); x.SetDisplayName("TopshelfSample顯示名稱"); x.SetServiceName("TopshelfSample服務名稱"); }); }
這樣一個簡單的服務就完成了。
log4net.config 如下:
<?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="RollingFile" type="log4net.Appender.FileAppender"> <file value="service.log" /> <appendToFile value="true" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%-5p %d{hh:mm:ss} %message%newline" /> </layout> </appender> <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> <mapping> <level value="ERROR" /> <foreColor value="Red, HighIntensity" /> </mapping> <mapping> <level value="INFO" /> <foreColor value="White" /> </mapping> <mapping> <level value="DEBUG" /> <foreColor value="Cyan" /> </mapping> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message%newline" /> </layout> </appender> <!-- Set root logger level to DEBUG and its only appender to Console --> <root> <level value="DEBUG" /> <appender-ref ref="RollingFile" /> <appender-ref ref="ColoredConsoleAppender" /> </root> </log4net>
安裝服務
服務編寫好以後,我們可以直接安裝,安裝的命令也很簡單,直接 TopshelfSample.exe install
已經成功安裝。
啟動:TopshelfSample.exe start
停止:TopshelfSample.exe stop
卸載:TopshelfSample.exe uninstall
更多命令可以TopshelfSample.exe help
跨平臺
Topshelf是一個開源的跨平臺的宿主服務框架,不過本身只支持mono 命令行執行,不能使用Topshelf的命令行Start,Stop控制服務。
log4net ColoredConsoleAppender 不支持linux ,所以去掉ColoredConsoleAppender ,保留RollingFile。
log4net.config
<?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="RollingFile" type="log4net.Appender.FileAppender"> <file value="service.log" /> <appendToFile value="true" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%-5p %d{hh:mm:ss} %message%newline" /> </layout> </appender> <!-- Set root logger level to DEBUG and its only appender to Console --> <root> <level value="DEBUG" /> <appender-ref ref="RollingFile" /> </root> </log4net>
下麵我們就來看看一下運行在linux下。
首先大家要安裝好 mono
可以參考:http://www.cnblogs.com/linezero/p/4774850.html
測試系統版本:centos 6.4 mono 3.10.0
將程式上傳到linux 系統執行。
mono TopshelfSample.exe
查看日誌,成功執行
參考文檔:
https://topshelf.readthedocs.org/en/latest/configuration/quickstart.html