当前位置: 移动技术网 > IT编程>开发语言>.net > 使用Topshelf开发Windows服务、记录日志

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

2018年09月28日  | 移动技术网IT编程  | 我要评论

妈咪13岁,骑肩膀,印专家劝告新德里

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

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

以下为具体步骤:

一、引用topshelf 并使用

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

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

 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里 加如下配置

 

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

 5、生成项目

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

6、安装、卸载服务

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

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

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

 

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

 

 7、运行结果 

在安装服务后开启服务 

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网