diff --git a/TopshelfStudy.NetCoreDemo/Program.cs b/TopshelfStudy.NetCoreDemo/Program.cs
index 9606b1b..925ca31 100644
--- a/TopshelfStudy.NetCoreDemo/Program.cs
+++ b/TopshelfStudy.NetCoreDemo/Program.cs
@@ -2,12 +2,13 @@
 using Topshelf;
 
 using System.Security.Cryptography.X509Certificates;
+using System.Threading.Tasks;
 
 namespace TopshelfStudy.NetCoreDemo
 {
     class Program
     {
-        static void Main(string[] args)
+        static async Task Main(string[] args)
         {
             var topshelfExitCode = HostFactory.Run(config =>
            {
@@ -37,6 +38,8 @@ namespace TopshelfStudy.NetCoreDemo
 
             //退出码
             Environment.ExitCode = (int)Convert.ChangeType(topshelfExitCode, topshelfExitCode.GetTypeCode());
+
+            await Task.CompletedTask;
         }
     }
 }
diff --git a/TopshelfStudy.NetCoreDemo/QuartzNet/CustomSchedulerListener.cs b/TopshelfStudy.NetCoreDemo/QuartzNet/CustomSchedulerListener.cs
index ae8520f..8f95a3d 100644
--- a/TopshelfStudy.NetCoreDemo/QuartzNet/CustomSchedulerListener.cs
+++ b/TopshelfStudy.NetCoreDemo/QuartzNet/CustomSchedulerListener.cs
@@ -20,6 +20,8 @@ namespace TopshelfStudy.NetCoreDemo
     {
         private IScheduler _scheduler;
 
+        public readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
+
         public CustomSchedulerListener(IScheduler scheduler)
         {
             _scheduler = scheduler;
@@ -27,7 +29,7 @@ namespace TopshelfStudy.NetCoreDemo
 
         public Task JobAdded(IJobDetail jobDetail, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine($"{jobDetail.Key} 作业:被添加,成功启用");
+            logger.Info($"{jobDetail.Key} 作业:被添加,成功启用");
             return Task.CompletedTask;
         }
 
@@ -39,11 +41,11 @@ namespace TopshelfStudy.NetCoreDemo
         {
             if (_scheduler.CheckExists(jobKey).Result)
             {
-               Console.WriteLine($"{jobKey}  作业:即将删除");
+                logger.Info($"{jobKey}  作业:即将删除");
             }
             else
             {
-                Console.WriteLine($"{jobKey}  作业:完成删除");
+                logger.Info($"{jobKey}  作业:完成删除");
             }
 
             return Task.CompletedTask;
@@ -54,7 +56,7 @@ namespace TopshelfStudy.NetCoreDemo
         /// </summary>
         public Task JobInterrupted(JobKey jobKey, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine($"{jobKey}  作业:被中断");
+            logger.Info($"{jobKey}  作业:被中断");
 
             return Task.CompletedTask;
         }
@@ -64,7 +66,7 @@ namespace TopshelfStudy.NetCoreDemo
         /// </summary>
         public Task JobPaused(JobKey jobKey, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine($"{jobKey}  作业:被暂停");
+            logger.Info($"{jobKey}  作业:被暂停");
 
             return Task.CompletedTask;
         }
@@ -74,7 +76,7 @@ namespace TopshelfStudy.NetCoreDemo
         /// </summary>
         public Task JobResumed(JobKey jobKey, CancellationToken cancellationToken = default(CancellationToken))
         {
-           Console.WriteLine($"{jobKey}  作业:被继续");
+            logger.Info($"{jobKey}  作业:被继续");
 
             return Task.CompletedTask;
         }
@@ -84,7 +86,7 @@ namespace TopshelfStudy.NetCoreDemo
         /// </summary>
         public Task JobScheduled(ITrigger trigger, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine($"{trigger.Key}  触发器:添加到 调度器");
+            logger.Info($"{trigger.Key}  触发器:添加到 调度器");
             return Task.CompletedTask;
         }
 
@@ -100,8 +102,8 @@ namespace TopshelfStudy.NetCoreDemo
         {
             var jobKeys = _scheduler.GetJobKeys(GroupMatcher<JobKey>.GroupEquals(jobGroup)).Result;
             foreach (var jobKey in jobKeys)
-            { 
-                
+            {
+
             }
             Console.WriteLine($"{jobGroup}  作业组:被暂停");
 
@@ -111,7 +113,7 @@ namespace TopshelfStudy.NetCoreDemo
         public Task JobsResumed(string jobGroup, CancellationToken cancellationToken = default(CancellationToken))
         {
             var jobKeys = _scheduler.GetJobKeys(GroupMatcher<JobKey>.GroupEquals(jobGroup)).Result;
-            Console.WriteLine($"{jobGroup}  作业组:被继续");
+            logger.Info($"{jobGroup}  作业组:被继续");
             return Task.CompletedTask;
         }
 
@@ -120,13 +122,13 @@ namespace TopshelfStudy.NetCoreDemo
         /// </summary>
         public Task JobUnscheduled(TriggerKey triggerKey, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine($"{triggerKey.Name}  触发器:Unscheduled");
+            logger.Info($"{triggerKey.Name}  触发器:Unscheduled");
             return Task.CompletedTask;
         }
 
         public Task SchedulerError(string msg, SchedulerException cause, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine($"Scheduler出现错误:{msg}");
+            logger.Info($"Scheduler出现错误:{msg}");
             return Task.CompletedTask;
         }
 
@@ -162,31 +164,31 @@ namespace TopshelfStudy.NetCoreDemo
 
         public Task TriggerFinalized(ITrigger trigger, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine($"{trigger.Key.Name}:TriggerFinalized");
+            logger.Info($"{trigger.Key.Name}:TriggerFinalized");
             return Task.CompletedTask;
         }
 
         public Task TriggerPaused(TriggerKey triggerKey, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine($"{triggerKey.Name}:TriggerPaused");
+            logger.Info($"{triggerKey.Name}:TriggerPaused");
             return Task.CompletedTask;
         }
 
         public Task TriggerResumed(TriggerKey triggerKey, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine($"{triggerKey.Name}:TriggerResumed");
+            logger.Info($"{triggerKey.Name}:TriggerResumed");
             return Task.CompletedTask;
         }
 
         public Task TriggersPaused(string triggerGroup, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine($"{triggerGroup}:TriggersPaused");
+            logger.Info($"{triggerGroup}:TriggersPaused");
             return Task.CompletedTask;
         }
 
         public Task TriggersResumed(string triggerGroup, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine($"{triggerGroup}:TriggersResumed");
+            logger.Info($"{triggerGroup}:TriggersResumed");
             return Task.CompletedTask;
         }
     }
diff --git a/TopshelfStudy.NetCoreDemo/QuartzNet/CustomTriggerListener.cs b/TopshelfStudy.NetCoreDemo/QuartzNet/CustomTriggerListener.cs
index 78087c6..00164a2 100644
--- a/TopshelfStudy.NetCoreDemo/QuartzNet/CustomTriggerListener.cs
+++ b/TopshelfStudy.NetCoreDemo/QuartzNet/CustomTriggerListener.cs
@@ -16,6 +16,8 @@ namespace TopshelfStudy.NetCoreDemo
     /// </summary>
     public class CustomTriggerListener : ITriggerListener
     {
+        public readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
+
         public string Name { get; } = nameof(CustomTriggerListener);
 
         public CustomTriggerListener()
@@ -29,7 +31,7 @@ namespace TopshelfStudy.NetCoreDemo
         /// </summary>
         public Task TriggerComplete(ITrigger trigger, IJobExecutionContext context, SchedulerInstruction triggerInstructionCode, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine("触发器执行后");
+            logger.Info("触发器执行后");
             return Task.CompletedTask;
         }
 
@@ -40,7 +42,7 @@ namespace TopshelfStudy.NetCoreDemo
         /// </summary>
         public Task TriggerFired(ITrigger trigger, IJobExecutionContext context, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine("触发器执行前");
+            logger.Info("触发器执行前");
             return Task.CompletedTask;
         }
 
@@ -52,7 +54,7 @@ namespace TopshelfStudy.NetCoreDemo
         /// </summary>
         public Task TriggerMisfired(ITrigger trigger, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine("错过触发时间,本次任务丢失.");
+            logger.Info("错过触发时间,本次任务丢失.");
             return Task.CompletedTask;
         }
 
@@ -65,7 +67,7 @@ namespace TopshelfStudy.NetCoreDemo
         /// </returns>
         public Task<bool> VetoJobExecution(ITrigger trigger, IJobExecutionContext context, CancellationToken cancellationToken = default(CancellationToken))
         {
-            Console.WriteLine("触发器审核通过,继续执行.");
+            logger.Info("触发器审核通过,继续执行.");
             return Task.FromResult(false); 
         }
     }
diff --git a/TopshelfStudy.NetCoreDemo/QuartzNet/JobDemo.cs b/TopshelfStudy.NetCoreDemo/QuartzNet/JobDemo.cs
index 9a4c51a..5c6ad66 100644
--- a/TopshelfStudy.NetCoreDemo/QuartzNet/JobDemo.cs
+++ b/TopshelfStudy.NetCoreDemo/QuartzNet/JobDemo.cs
@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Threading;
 using System.Threading.Tasks;
 
 using Quartz;
@@ -10,14 +11,14 @@ namespace TopshelfStudy.NetCoreDemo
 {
     public class JobDemo : IJob
     {
+        NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
+
         public async Task Execute(IJobExecutionContext context)
         {
             //模拟业务操作
-            string jobName = "测试作业";
-            Console.WriteLine($"{jobName} 开始执行");
-            Console.WriteLine($"{jobName} 执行中...");
-            await Task.Delay(0*1000);
-            Console.WriteLine($"{jobName} 执行完毕.");
+            Logger.Info($"执行作业:测试作业");
+
+            await Task.Delay(0);
         }
     }
 }