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

 

如果你觉得本文对你有帮助,请点击“推荐”,谢谢。

posted @ 2016-01-26 14:52 LineZero 阅读(...) 评论(...) 编辑 收藏