使用Topshelf開發Windows服務、log4net記錄日誌

開發windows服務,除了在vs裏新建服務項目外(以前有寫過具體開發方法,可點擊查看),還能夠使用Topshelf。html

不過使用topshelf須要.netframework 4.5.2版本,在vs2013上引用不成功,我這裏使用的是vs2017。windows

如下爲具體步驟:app

1、引用topshelf 並使用

一、在vs裏新建控制檯程序

二、在引用裏使用NuGet搜索topshelf並安裝

 三、程序代碼

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");
            });
        }
    }
}

 

四、log4net引用和配置方法

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

  4.2 在app.config 裏做以下配置spa

 <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裏 加以下配置.net

 

[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch = true)]

 五、生成項目

生成項目後能夠將bin\debug裏的內容拷出來單獨放服務的位置,debug

六、安裝、卸載服務

 使用管理員運行cmd,cd到你的服務文件位置,我這裏直接在debug裏安裝服務的。日誌

 服務.exe install     -----安裝服務code

在服務裏就能夠看到安裝的服務了htm

 

  服務.exe uninstall     -----卸載服務  

 

 七、運行結果 

在安裝服務後開啓服務 

相關文章
相關標籤/搜索