欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Topshelf 学习 跨平台

程序员文章站 2023-12-24 08:35:09
Topshelf 学习 跨平台 Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。 官网:http://topshelf-project.com GitHub:http://github.com/topshelf/Top ......

Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。

官网:http://topshelf-project.com 

GitHub:http://github.com/topshelf/Topshelf

下面就开始来学习。

创建项目

1.新建一个控制台程序

2.添加引用

我们直接搜索 Topshelf log4net

 Topshelf 学习 跨平台

或者Nuget控制台:Install-Package Topshelf.Log4Net

正常情况下 直接安装Topshelf 一个就可以了。Log4Net只是为了更好的方便记录日志。

 

3.创建服务

先创建一个类,继承 ServiceControl 然后实现。

Topshelf 学习 跨平台
    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;
        }
    }
Topshelf 学习 跨平台

LogWriter 需要using Topshelf.Logging;

 

4.调用

然后再Main中调用

Topshelf 学习 跨平台
        static void Main(string[] args)
        {
            HostFactory.Run(x =>
            {
                x.UseLog4Net("log4net.config");

                x.Service<SampleService>();
                x.SetDescription("TopshelfSample说明");
                x.SetDisplayName("TopshelfSample显示名称");
                x.SetServiceName("TopshelfSample服务名称");
            });
        }
Topshelf 学习 跨平台

这样一个简单的服务就完成了。

Topshelf 学习 跨平台

log4net.config 如下:

Topshelf 学习 跨平台
<?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>
Topshelf 学习 跨平台

安装服务

服务编写好以后,我们可以直接安装,安装的命令也很简单,直接 TopshelfSample.exe install

Topshelf 学习 跨平台

Topshelf 学习 跨平台

已经成功安装。

启动:TopshelfSample.exe start

停止:TopshelfSample.exe stop

卸载:TopshelfSample.exe uninstall

更多命令可以TopshelfSample.exe help

跨平台

Topshelf是一个开源的跨平台的宿主服务框架,不过本身只支持mono 命令行执行,不能使用Topshelf的命令行Start,Stop控制服务。

log4net ColoredConsoleAppender 不支持linux ,所以去掉ColoredConsoleAppender ,保留RollingFile。

log4net.config

Topshelf 学习 跨平台
<?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>
Topshelf 学习 跨平台

 

下面我们就来看看一下运行在linux下。

首先大家要安装好 mono

可以参考:

测试系统版本:centos 6.4  mono 3.10.0

 Topshelf 学习 跨平台

将程序上传到linux 系统执行。 

mono TopshelfSample.exe

Topshelf 学习 跨平台

 查看日志,成功执行

Topshelf 学习 跨平台

参考文档:

https://topshelf.readthedocs.org/en/latest/configuration/quickstart.html

上一篇:

下一篇: