使用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()
{
AutoReset = true,
Enabled = true
};
int i = ;
_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=""Logs_"yyyyMMdd".txt"" />-->
<param name="DatePattern" value="yyyyMMdd".txt"" />
<!--在文件名后面加内容 比如 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、运行结果
在安装服务后开启服务

使用Topshelf开发Windows服务、log4net记录日志的更多相关文章
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
C# DateTime的11种构造函数 别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...
- 使用Topshelf 开发windows服务
在业务系统中,我们为了调度一些自动执行的任务或从队列中消费一些消息,所以基本上都会涉及到后台服务的开发.如果用windows service开发,非常不爽的一件事就是:调试相对麻烦,而且你还需要了解 ...
- topshelf 开发windows 服务资料
官方配置 http://docs.topshelf-project.com/en/latest/configuration/config_api.html#service-start-modes to ...
- C# 开发 Windows 服务 使用Log4net 组件 不能生成日志文件
使用VS2012开发Windows服务,需要使用Log4net日志组件记录业务情况,但是始终生成不了日志文件. /// <summary> /// 入口方法 /// </summar ...
- 使用Topshelf创建Windows服务
概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...
- Topshelf创建Windows服务
使用Topshelf创建Windows服务 概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps ...
- 【第三方插件】使用Topshelf创建Windows服务
概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...
- 使用Topshelf创建Windows服务[转载]
概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...
- C#开发Windows服务详细流程
1.Windows服务简单介绍 Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序,主要用于长时间运行的功能或者执行定时任务.一般情况下,用户不能通过用户界面来安装和启 ...
随机推荐
- 利用Python+163邮箱授权码发送带附件的邮件
背景 前段时间写了个自动爬虫的脚本,定时在阿里云服务器上执行,会从某个网站上爬取链接保存到txt文本中,但是脚本不够完善,我需要爬虫完毕之后通过邮件把附件给我发送过来,之前写过一个<利用Pyth ...
- Educational Codeforces Round 61 Editorial--C. Painting the Fence
https://codeforces.com/contest/1132/problem/C 采用逆向思维,要求最大的覆盖,就先求出总的覆盖,然后减去删除两个人贡献最少的人 #include<io ...
- Python selenium webdriver设置js操作页面滚动条
js2 = "window.scrollTo(0,0);" #括号中为坐标 当不知道需要的滚动的坐标大小时: weizhi2 = driver.find_element_by_id ...
- 【转】vim 的各种用法,很实用哦,都是本人是在工作中学习和总结的
原文地址https://www.cnblogs.com/lxwphp/p/7738356.html (一)初级个性化配置你的vim 1.vim是什么? vim是Vi IMproved,是编辑器Vi的一 ...
- MySQL注入技巧性研究
0x00 前言 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,本人最近针对MySQL注入做了 ...
- 第42节:Java知识点回顾复习
Java介绍 Java是一门面向对象的程序设计的编程语言,在1995年,sun公司发布了Java这门编程语言,有咖啡的名称,是当时灵机一动的想法.在2010年的时候被Oracle公司收购了,目前jdk ...
- [Swift-2019力扣杯春季初赛]1. 易混淆数
给定一个数字 N,当它满足以下条件的时候返回 true: 把原数字旋转180°以后得到新的数字. 如 0, 1, 6, 8, 9 旋转 180° 以后,得到了新的数字 0, 1, 9, 8, 6 . ...
- Spark基础-scala学习(四、函数式编程)
函数式编程 将函数赋值给变量 匿名函数 高阶函数 高级函数的类型推断 scala的常用高阶函数 闭包 sam转换 currying函数 return 将函数赋值给变量 scala中的函数是一等公民,可 ...
- Ansible工具原理一
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命 ...
- 性能瓶颈之System
如果Source,Target,Mapping和Session都不存在性能上的瓶颈,则问题可能会出在System 因为Integration Service运行时,它使用了System的资源去运行组件 ...