• Topshelf 学习 跨平台【转载】


    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

  • 相关阅读:
    excel提取一类具有相似结构的部分数据,2种方式;数据——分列——分割符号/固定宽度;
    excel文字随单元格大小变化
    python操作excel
    Docker容器使用
    阿里云服务器部署好后,浏览器远程访问,提示无法访问此网站;
    StringBuffer和StringBuilder的区别
    【Linux运维-集群技术进阶】集群/分布式环境下5种session处理策略
    mysql如何进行以,分割的字符串的拆分
    Dubbox的介绍和简单示例
    JAVA回调机制(CallBack)详解
  • 原文地址:https://www.cnblogs.com/guzhengtao/p/20180730_1508.html
Copyright © 2020-2023  润新知