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

使用Topshelf开发Windows服务、记录日志

程序员文章站 2023-03-25 17:54:04
开发windows服务,除了在vs里新建服务项目外(之前有写过具体开发方法,可点击查看),还可以使用Topshelf。 不过使用topshelf需要.netframeword 4.5.2版本,在vs2013上引用不成功,我这里使用的是vs2017。 以下为具体步骤: 一、引用topshelf 并使用 ......

开发windows服务,除了在vs里新建服务项目外(之前有写过具体开发方法,可点击),还可以使用topshelf。

不过使用topshelf需要.netframeword 4.5.2版本,在vs2013上引用不成功,我这里使用的是vs2017。

以下为具体步骤:

一、引用topshelf 并使用

1、在vs里新建控制台程序

使用Topshelf开发Windows服务、记录日志

2、在引用里使用nuget搜索topshelf并安装

使用Topshelf开发Windows服务、记录日志

使用Topshelf开发Windows服务、记录日志

 3、程序代码

using log4net;
using system;
using system.io;
using system.reflection;
using system.timers;
using topshelf;

namespace topshelftest
{
    public class testwritelog
    {
        readonly timer _timer;
        ilog _log = logmanager.getlogger(typeof(testwritelog));
        public testwritelog()
        {
            _timer = new timer(1000)
            {
                autoreset = true,
                enabled = true
            };
            int i = 0;
            _timer.elapsed += delegate (object sender, system.timers.elapsedeventargs e)
            {
                i++;
                _log.info("测试" + i.tostring());

            };
        }

        public void start()
        {
            _log.info("service is started");
            _timer.start();
        }
        public void stop()
        {
            _log.info("service is stopped");
            _timer.stop();
        }


        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        static void main()
        {
            
            hostfactory.run(c =>
            {
                c.service<testwritelog>((x) =>
                {
                    x.constructusing(name => new testwritelog());
                    x.whenstarted((t) => t.start());
                    x.whenstopped((t) => t.stop());
                });
                c.runaslocalsystem();
                //服务描述
                c.setdescription("testservices测试服务描述");
                //服务显示名称
                c.setdisplayname("testservices测试服务显示名称");
                //服务的真实名称
                c.setservicename("testservices");
            });
        }
    }
}

 

4、log4net引用和配置方法

  4.1 使用以上方法引用log4net.dll

  4.2 在app.config 里作如下配置

 <configsections>
    <section name="log4net" type="log4net.config.log4netconfigurationsectionhandler, log4net" />
  </configsections>

  <log4net>
    <!-- off, fatal, error, warn, info, debug, all -->
    <!-- set root logger level to error and its appenders -->
    <root>
      <level value="all" />
      <appender-ref ref="sysappender" />
    </root>
    <!-- print only messages of level debug or above in the packages -->
    <logger name="weblogger">
      <level value="log" />
    </logger>
    <appender name="sysappender" type="log4net.appender.rollingfileappender,log4net">
      <!--<param name="file" value="app_data/" />-->
      <file value="logs\log" />
      <!--日志文件位置和文件名-->
      <param name="appendtofile" value="true" />
      <param name="rollingstyle" value="date" />
      <!--<param name="datepattern" value="&quot;logs_&quot;yyyymmdd&quot;.txt&quot;" />-->
      <param name="datepattern" value="yyyymmdd&quot;.txt&quot;" />
      <!--在文件名后面加内容 比如 log名变为log20180808-->
      <param name="staticlogfilename" value="false" />
      <layout type="log4net.layout.patternlayout,log4net">
        <param name="conversionpattern" value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
    <appender name="consoleapp" type="log4net.appender.consoleappender,log4net">
      <layout type="log4net.layout.patternlayout,log4net">
        <param name="conversionpattern" value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
  </log4net>

  4.3 在properties的assemblyinfo.cs里 加如下配置

使用Topshelf开发Windows服务、记录日志

 

[assembly: log4net.config.xmlconfigurator(configfileextension = "config", watch = true)]

 5、生成项目

生成项目后可以将bin\debug里的内容拷出来单独放服务的位置,

6、安装、卸载服务

 使用管理员运行cmd,cd到你的服务文件位置,我这里直接在debug里安装服务的。

 服务.exe install     -----安装服务

使用Topshelf开发Windows服务、记录日志

在服务里就可以看到安装的服务了

使用Topshelf开发Windows服务、记录日志

 

  服务.exe uninstall     -----卸载服务  

使用Topshelf开发Windows服务、记录日志

 

 7、运行结果 

在安装服务后开启服务 

使用Topshelf开发Windows服务、记录日志