zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    FZU 2098 刻苦的小芳(卡特兰数,动态规划)
    卡特兰数总结
    FZU 1064 教授的测试(卡特兰数,递归)
    HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
    Java 第十一届 蓝桥杯 省模拟赛 正整数的摆动序列
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
    Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
  • 原文地址:https://www.cnblogs.com/guzhengtao/p/20180730_1508.html
Copyright © 2011-2022 走看看