使用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="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、运行结果
在安装服务后开启服务