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


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

    不过使用topshelf需要.netframework 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="Logslog" />
          <!--日志文件位置和文件名-->
          <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、生成项目

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

    6、安装、卸载服务

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

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

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

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

     7、运行结果 

    在安装服务后开启服务 

  • 相关阅读:
    第七次——例行报告
    贪吃蛇功能说明书(初稿)
    第六周——例行报告
    第五周——例行报告
    贪吃蛇界面设计初稿
    贪吃蛇需求分析
    软件工程第三次作业
    软件工程第二次作业
    软件工程第一次作业
    Python基础综合练习修改
  • 原文地址:https://www.cnblogs.com/i-mengli/p/9716498.html
Copyright © 2020-2023  润新知