使用Topshelf建立Windows服務,服務中使用log4net記錄日誌

來源:互聯網
上載者:User

標籤:location   encoding   datetime   files   proc   led   cep   splay   enc   

一、建立一個控制台應用程式

二、使用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 %~dp0WindowsService1.exe installnet start TEST_SERVICESpause

  2、卸載 uninstall.bat

@echo unInstall...cd /d %~dp0WindowsService1.exe uninstallpause

  七、源碼

  點擊下載 

 

使用Topshelf建立Windows服務,服務中使用log4net記錄日誌

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.