使用Topshelf创建Windows服务,服务中使用log4net记录日志

一、新建一个控制台应用程序

二、使用nuget引用 TopShelf和log4net插件

三、log4net配置文件添加

  在根目录增加log4net.config文件和logHelper类库的添加

   log4net.config内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <log4net>
    <!--信息日志配置-->
    <appender name="InfoLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" type=""  value="Log\\Info\\" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="20"/>
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="yyyy-MM-dd‘.log‘" />
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d  [%5p] %c: %m%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter,log4net">
        <levelMin value="INFO" />
        <levelMax value="INFO" />
      </filter>
    </appender>
    <!--错误日志配置-->
    <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" type=""  value="Log\\Error\\" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="20"/>
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="yyyy-MM-dd‘.log‘" />
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d  [%5p] %c: %m%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter,log4net">
        <levelMin value="ERROR" />
        <levelMax value="ERROR" />
      </filter>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="ErrorLogFileAppender" />
      <appender-ref ref="InfoLogFileAppender" />
    </root>
    <logger name="ALL" >
      <level value="ALL" />
      <appender-ref ref="ErrorLogFileAppender"></appender-ref>
      <appender-ref ref="InfoLogFileAppender"></appender-ref>
    </logger>
  </log4net>
</configuration>

  logHelper类库:

using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace WindowsService1
{
    public class LogHelper
    {
        public static ILog GetLog<T>(T t)
        {
            ILog _log = LogManager.GetLogger("");
            if (t != null)
            {
                _log = LogManager.GetLogger(t.GetType());
            }
            return _log;
        }
    }
}

四、编写服务功能类【每3秒打印一个日志】

using log4net;
using System;
using System.IO;
using System.Reflection;
using System.Timers;

namespace WindowsService1
{
    public class TestWriteDate
    {
        readonly Timer _timer;
        public TestWriteDate()
        {
            _timer = new Timer(3000)
            {
                AutoReset = true,
                Enabled = true
            };
            _timer.Elapsed += delegate (object sender, System.Timers.ElapsedEventArgs e)
            {
                LogHelper.GetLog(this).Info(string.Format("DATE: {0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
                LogHelper.GetLog(this).Error("测试出错!!!", new Exception("dfsafdsafddsafdsa"));
                try
                {
                    int i = 0;
                    int j = 10 / i;
                }
                catch (Exception ex)
                {
                    LogHelper.GetLog(this.GetType()).Error(ex.Message, ex);
                }
            };
        }

        public void Start()
        {
            LogHelper.GetLog(this).Info("开始执行");
        }

        public void Stop()
        {
            LogHelper.GetLog(this).Info(string.Format("结束执行") + Environment.NewLine + Environment.NewLine);
            _timer.AutoReset = false;
            _timer.Enabled = false;
        }
    }
}

五、与TopShelf集成

  Program.cs的代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using Topshelf;

namespace WindowsService1
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        static void Main()
        {
            string assemblyFilePath = Assembly.GetExecutingAssembly().Location;
            string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath);
            string configFilePath = assemblyDirPath + "\\log4net.config";
            log4net.Config.XmlConfigurator.Configure(new FileInfo(configFilePath));
            HostFactory.Run(c =>
            {
                c.Service<TestWriteDate>((x) =>
                {
                    x.ConstructUsing(name => new TestWriteDate());
                    x.WhenStarted((t) => t.Start());
                    x.WhenStopped((t) => t.Stop());
                });
                c.RunAsLocalSystem();
                //服务描述
                c.SetDescription("TEST_SERVICES");
                //服务显示名称
                c.SetDisplayName("TEST_SERVICES");
                //服务的真实名称
            });
        }
    }
}

  六、服务的安装与卸载

  1、安装 install.bat

@echo begin...
cd /d %~dp0
WindowsService1.exe install
net start TEST_SERVICES
pause

  2、卸载 uninstall.bat

@echo unInstall...
cd /d %~dp0
WindowsService1.exe uninstall
pause

 七、源码

  点击下载

原文地址:https://www.cnblogs.com/wjx-blog/p/8881804.html

时间: 2024-10-09 11:51:52

使用Topshelf创建Windows服务,服务中使用log4net记录日志的相关文章

Topshelf创建Windows服务

使用Topshelf创建Windows服务 概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的介绍使用使用Topshelf创建Windows 服务.Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主. 引用安装 1.官网:http://topshelf-project.c

使用Topshelf创建Windows 服务

本文转载:http://www.cnblogs.com/aierong/archive/2012/05/28/2521409.html b.利用组件Topshelf 本方式特点:代码简单,开源组件,Windows服务可运行多个实例 Topshelf是一个开源的跨平台的服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务. 官方网站:http://topshelf-project.com 第1步:引用程序集TopShelf.dll和log4net.dll 第2步:创

【转】使用Topshelf创建Windows服务

转自:http://www.cnblogs.com/jys509/p/4614975.html 概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的介绍使用使用Topshelf创建Windows 服务.Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主. 引用安装 1.官网

使用Topshelf创建Windows服务

本方式特点:代码简单,开源组件,Windows服务可运行多个实例 Topshelf是一个开源的跨平台的服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务. 官方网站:http://topshelf-project.com 第1步:引用程序集TopShelf.dll和log4net.dll 第2步:创建一个服务类MyClass,里面包含两个方法Start和Stop,还包含一个定时器Timer,每隔5秒往文本文件中写入字符 public class MyClass

使用Topshelf 5步创建Windows 服务 z

使用Topshelf创建Windows 服务简要的介绍了创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的介绍使用使用Topshelf创建Windows 服务.Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主. 1.Topshelf的代码托管在http://topshelf-project.c

使用.NET Core创建Windows服务(二) - 使用Topshelf方式

原文:Creating Windows Services In .NET Core – Part 2 – The "Topshelf" Way 作者:Dotnet Core Tutorials 译者:Lamond Lu 译文:使用.NET Core创建Windows服务(二) - 使用Topshelf方式 使用.NET Core创建Windows服务 使用微软推荐方式 使用Topshelf方式 在前一篇文章中,我给大家介绍了,如何基于微软推荐方式使用.NET Core创建Windows

C# 使用Vici WinService组件来创建Windows服务

Vici WinService 是 是Windows平台下使用C#开发的轻量级用于创建,删除服务的类库,您只需简单的几行代码即可实现多线程异步服务的创建,删除,运行 废话不多说,直接上代码 /****************************************************************** * 创建人:HTL * 创建时间:2015-5-12 14:09:39 * 说明:使用Vici WinService组件创建的Windows服务 * Email:[email

(转)创建Windows服务(Windows Services)N种方式总结

转自:http://www.cnblogs.com/aierong/archive/2012/05/28/2521409.html 最近由于工作需要,写了一些windows服务程序,有一些经验,我现在总结写出来.目前我知道的创建创建Windows服务有3种方式:a.利用.net框架类ServiceBaseb.利用组件Topshelfc.利用小工具instsrv和srvany 下面我利用这3种方式,分别做一个windows服务程序,程序功能就是每隔5秒往程序目录下记录日志: a.利用.net框架类

Quartz+TopShelf实现Windows服务作业调度

Quartz:首先我贴出来了两段代码(下方),可以看出,首先根据配置文件(quartz.config),包装出一个Quartz.Core.QuartzScheduler instance,这是一个调度器,调度各个任务项(Jobs)的执行.这个调度器可以被Start.被Shutdown.被PauseAll.被ResumeAll,这对应 了windows服务的开启.停止.暂停.恢复.当启动服务,我就调用调度器的Start(),停止服务我就调用调度器的Shutdown()方法. namespace Q