public void Must_Log_To_File() { // Arrange ILogRepository logRepository = new FakeLogRepository(); var log = new JobLogger(AppDomain.CurrentDomain.BaseDirectory + "/logger6.cfg.json", logRepository); var expected = string.Format( DateTime.Now.ToShortDateString() + " - [INFO]: This must be INFO File log{0}" + DateTime.Now.ToShortDateString() + " - [WARNING]: This must be WARNING File log{0}" + DateTime.Now.ToShortDateString() + " - [ERROR]: This must be ERROR File log{0}", Environment.NewLine); // Act log.Info("This must be INFO File log"); log.Warning("This must be WARNING File log"); log.Error("This must be ERROR File log"); var result = File.ReadAllText("C:/Temp/Logs/log" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Year + ".txt"); // Assert Assert.IsTrue(File.Exists("C:/Temp/Logs/log" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Year + ".txt")); Assert.AreEqual(result, expected); File.Delete("C:/Temp/Logs/log" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Year + ".txt"); }
public void Must_Log_To_Console() { // Arrange var log = new JobLogger(AppDomain.CurrentDomain.BaseDirectory + "/logger4.cfg.json"); using (var sw = new StringWriter()) { Console.SetOut(sw); var expected = string.Format( DateTime.Now.ToShortDateString() + " - [INFO]: This must be INFO{0}" + DateTime.Now.ToShortDateString() + " - [WARNING]: This must be WARNING{0}" + DateTime.Now.ToShortDateString() + " - [ERROR]: This must be ERROR{0}", Environment.NewLine); // Act log.Info("This must be INFO"); log.Warning("This must be WARNING"); log.Error("This must be ERROR"); //Assert Assert.AreEqual(sw.ToString(), expected); } }
public void JobLogger_Test_MockFactory_Disable_Source() { // arrange var Mensaje = "Hi!"; var mockConfiguration = new Mock <ILogConfiguration>(); mockConfiguration.Setup(x => x.AllowLevels).Returns(LogLevel.INFO); mockConfiguration.Setup(x => x.AllowSource).Returns(null); JobLogger.SetLogConfiguration(mockConfiguration.Object); var mocksource = new Mock <LogSourceBase>(); mocksource.Setup(x => x.Log(Mensaje, LogLevel.WARNING)).Returns(Task.CompletedTask); var mockFactory = new Mock <ILogSourceFactory>(); mockFactory.Setup(x => x.Create(LogSource.DATABASE)).Returns(mocksource.Object); JobLogger.SetLogSourceFactory(mockFactory.Object); // act JobLogger.Info(Mensaje).Wait(); // assert mocksource.Verify(x => x.Log(Mensaje, LogLevel.WARNING), Times.Never()); mocksource.Verify(x => x.Log(Mensaje, LogLevel.ERROR), Times.Never()); mocksource.Verify(x => x.Log(Mensaje, LogLevel.INFO), Times.Never()); mockFactory.Verify(x => x.Create(LogSource.DATABASE), Times.Never()); mockFactory.Verify(x => x.Create(LogSource.CONSOLE), Times.Never()); mockFactory.Verify(x => x.Create(LogSource.FILE), Times.Never()); }
/// <summary> /// 重载基类算法 /// </summary> /// <returns></returns> internal override string GenerateData() { var start = DateTime.Parse($"{DateTime.Now.Year}-{DateTime.Now.Month}-{DateTime.Now.Day}"); //统计当天时间 var end = DateTime.Parse($"{DateTime.Now.Year}-{DateTime.Now.Month}-{DateTime.Now.Day + 1}").AddSeconds(-1); var startStr = DateTime.Now.ToString("yyyyMMdd000000"); //统计当天时间 var endStr = end.ToString("yyyyMMddHHmmss"); var week = DateTime.Now.DayOfWeek; if (week == DayOfWeek.Saturday || week == DayOfWeek.Sunday)//周末跳过 { return(string.Empty); } //获取当前登录状态 List <BsonDocument> loginList = dataOp.FindAllByQuery("SysBehaviorLog", Query.And(Query.GTE("timeSort", startStr), Query.LTE("timeSort", endStr))).ToList(); //2015.4.13 新增错误日志发送到125.77.255.2:8023端口进行存储,后续迁移 JobLogger.Info($"登陆统计个数:{loginList.Count()}"); if (loginList.Any()) { return(string.Empty); } var errorMessage = $"截止{start.ToString()}至{end.ToString()} {DateTime.Now:ddd} 系统目前无任何用户登录进行操作请注意"; var messageInfo = new PushMessageInfo() { content = "系统登录预警", approvalUserId = this.JobParamsDoc.Text("approvalUserId"), errorMessage = errorMessage, customerCode = SysAppConfig.CustomerCode, logType = "1" }; return(messageInfo.ToJson()); }
protected override void OnStart(string[] args) { //Debugger.Launch(); JobLogger.Info(string.Format("ServiceBaseOnStartV2")); scheduler.ListenerManager.AddJobListener(new SchedulerJobListener(), GroupMatcher <JobKey> .AnyGroup()); scheduler.Start(); JobLogger.Info(string.Format("添加首次执行任务,判断需要执行的事物")); ///默认调度器 new QuartzManager().JobSchedulerMain(scheduler); JobLogger.Info(string.Format("{0} Start", _ServiceName)); }
static void Main(string[] args) { //log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config")); //MZServiceRunner(); //return; JobLogger.Info(string.Format("TopshelfOnStart")); HostFactory.Run(x => { x.RunAsLocalSystem(); x.Service <ServiceRunner>(); x.SetDescription(string.Format("{0} Ver:{1}", System.Configuration.ConfigurationManager.AppSettings.Get("ServiceName"), System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString())); x.SetDisplayName(System.Configuration.ConfigurationManager.AppSettings.Get("ServiceDisplayName")); x.SetServiceName(System.Configuration.ConfigurationManager.AppSettings.Get("ServiceName")); x.EnablePauseAndContinue(); }); }
public void JobLogger_Test_INFO_Only_Console() { // arrange var Mensaje = "Hi!"; var mockConfiguration = new Mock <ILogConfiguration>(); mockConfiguration.Setup(x => x.AllowLevels).Returns(LogLevel.INFO); mockConfiguration.Setup(x => x.AllowSource).Returns(LogSource.CONSOLE); JobLogger.SetLogConfiguration(mockConfiguration.Object); // act JobLogger.Info(Mensaje).Wait(); // assert mockConfiguration.VerifyGet(x => x.AllowLevels); }
/// <summary> /// 基类执行器初始化 /// </summary> /// <param name="context"></param> internal void Init(IJobExecutionContext context) { try { _IJobExecutionContext = context; //初始化执行器 _jobParamsDoc = CustomerConfig.GetJobArgDoc(context.MergedJobDataMap.GetString("Parameters")); _statementData = CustomerConfig.GetJobArgDoc(context.MergedJobDataMap.GetString("statementData")); } catch (Exception ex) { JobLogger.Info("Job基类 初始化发生异常:" + ex.ToString()); } finally { // JobLogger.Info("Job基类 结束执行 "); } }
public void Must_Log_To_Database() { // Arrange ILogRepository logRepository = new FakeLogRepository(); var log = new JobLogger(AppDomain.CurrentDomain.BaseDirectory + "/logger5.cfg.json", logRepository); IList <Log> expected = new List <Log>(); expected.Add(new Log { Message = "This must be INFO Database log", Type = "Info", Date = DateTime.Now }); expected.Add(new Log { Message = "This must be WARNING Database log", Type = "Warning", Date = DateTime.Now }); expected.Add(new Log { Message = "This must be ERROR Database log", Type = "Error", Date = DateTime.Now }); // Act log.Info("This must be INFO Database log"); log.Warning("This must be WARNING Database log"); log.Error("This must be ERROR Database log"); var logs = logRepository.GetAll(); // Assert Assert.AreEqual(logs.ToList().Count(), 3); Assert.AreEqual(logs.ToList()[0].ToString(), expected[0].ToString()); Assert.AreEqual(logs.ToList()[1].ToString(), expected[1].ToString()); Assert.AreEqual(logs.ToList()[2].ToString(), expected[2].ToString()); }
/// <summary> /// 抽象方法 /// </summary> /// <returns></returns> internal void Start(IJobExecutionContext context) { Init(context);//基类初始化对象; // Version Ver = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; //JobLogger.Info("{0} 开始执行", this.ClassName); try { var messageDoc = GenerateData(); this.PushInfo(messageDoc); } catch (Exception ex) { JobLogger.Info("{0} 执行过程中发生异常:{1}", this.ClassName, ex.ToString()); } finally { // JobLogger.Info("{0} 结束执行", this.ClassName); } }
/// <summary> /// 重载基类算法,注意如果重复读取可能发生数据重复发送邮件 /// </summary> /// <returns></returns> internal override string GenerateData() { var rabbitQueueMessageType = JobParamsDoc.Text("MQMessageType"); var rabbitMQVirtualHost = JobParamsDoc.Text("MQVirtualHost"); var RetryCount = JobParamsDoc.Text("RetryCount"); var tableName = $"{rabbitQueueMessageType}_{rabbitMQVirtualHost}_{DateTime.Now.ToString("yyyy-MM")}"; var week = DateTime.Now.DayOfWeek; var retryTimeQuery = Query.And(Query.NE("DeQueueStage", 1), Query.GTE("EnQueueStage", 3)); //重试入队多次 var query = Query.Or(retryTimeQuery, Query.Exists("errorMsgs", true)); //有错误消息 var limit = 20; //获取当前登录状态 var recordCount = dataOp.FindCount(tableName, query); var topRecoredList = dataOp.FindLimitFieldsByQuery(tableName, query, new MongoDB.Driver.SortByDocument() { }, 0, limit, new string[] { "messageID", "errorMsgs", "MessageRouter", "MessageBody", "EnQueueStage" }).ToList(); //2015.4.13 新增错误日志发送到125.77.255.2:8023端口进行存储,后续迁移 if (!topRecoredList.Any()) { return(string.Empty); } JobLogger.Info($"队列执行错误个数:{recordCount}"); var errorMessage = new StringBuilder(); errorMessage.AppendLine($"{DateTime.Now.ToString("yyyy-MM")}捕获到队列执行异常数据${recordCount}条.前{limit}内容如下:\n\r"); topRecoredList.ForEach(doc => { errorMessage.AppendLine($"{doc.ToJson()}"); }); var approvalUserId = this.JobParamsDoc.Text("approvalUserId"); var messageInfo = new PushMessageInfo() { content = $"小票上传重试错误预警,失败条数:{recordCount}", approvalUserId = approvalUserId, errorMessage = errorMessage.ToString(), customerCode = SysAppConfig.CustomerCode, logType = "1" }; return(messageInfo.ToJson()); }
public void Execute(DataSet dataSet, CancellationToken cancellationToken) { try { //SubscriptionShippingNotificationDays = this.UnitOfWork.GetTypedRepository<IWebsiteConfigurationRepository>().GetOrCreateByName("SmartSupplyShippingNotification", SiteContext.Current.Website.Id); SubscriptionShippingNotificationDays = customSettings.Value.SmartSupplyShippingNotification; int priorDays = !string.IsNullOrEmpty(SubscriptionShippingNotificationDays) ? int.Parse(SubscriptionShippingNotificationDays) : 0; //BUSA-1168 : Added status check on SubscriptionBrasseler row to avoid cancelled smartsupply. var notifyDate = DateTimeOffset.Now.AddDays(priorDays); var subscriptionOrders = from sb in this.UnitOfWork.GetRepository <SubscriptionBrasseler>().GetTable() join co in this.UnitOfWork.GetRepository <CustomerOrder>().GetTable() on sb.CustomerOrderId equals co.Id where co.Status == "SubscriptionOrder" && (DbFunctions.TruncateTime(sb.NextDelieveryDate) == DbFunctions.TruncateTime(notifyDate)) select sb; if (subscriptionOrders.Count() == 0) { return; } this.UnitOfWork.BeginTransaction(); var repository = this.UnitOfWork.GetRepository <CustomerOrder>().GetTable(); if (repository != null) { var emailList = this.UnitOfWork.GetTypedRepository <IEmailListRepository>().GetOrCreateByName("SmartSupplyShippingNotificationEmailList", "SmartSupply Shipping Notification"); foreach (var subscriptionOrder in subscriptionOrders) { JobLogger.Info("id" + subscriptionOrder.Id + " /n custmrordrid" + subscriptionOrder.CustomerOrderId + " parentid" + subscriptionOrder.ParentCustomerOrderId); dynamic emailModel = new ExpandoObject(); PopulateEmailModel(subscriptionOrder, emailModel, repository); EmailService.SendEmailList(emailList.Id, emailTo, emailModel, emailList.Subject + " " + subscriptionOrder.NextDelieveryDate.ToString("MM-dd-yy"), this.UnitOfWork); } } } catch (Exception ex) { LogHelper.For(this).Error(ex); throw; } }
/// <summary> /// Job运行日志记录,SchedulerJobListener的运行日志 /// </summary> /// <param name="jobInfo"></param> /// <param name="executionTime"></param> /// <param name="executionDuration"></param> /// <param name="runLog"></param> public void WriteBackgroundJoLog(BackgroundJob jobInfo, DateTime executionTime, double executionDuration, string runLog) { JobLogger.Info($"WriteBackgroundJoLog调度{jobInfo.name} job内容:{runLog.Length}"); //默认发送通过配置文件判断是否发送日志信息,后续可通过任务进行调度进行配置文件修改,更新各大站点最新的配置信息 if (CustomerConfig.NeedSendLog) { BackgroundJobLog backgroundJobLog = new BackgroundJobLog { logId = System.Guid.NewGuid().ToString(), jobId = jobInfo.jobId, name = jobInfo.name, accemblyName = jobInfo.assemblyName, className = jobInfo.className, jobType = jobInfo.jobType, executionTime = executionTime.ToString("yyyy-MM-dd HH:mm:ss"), // ReSharper disable once SpecifyACultureInStringConversionExplicitly executionDuration = executionDuration.ToString(), createDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), runLog = runLog }; BackgroundJobWebAPIHelper.WriteBackgroundJoLog(backgroundJobLog); } }
public virtual void Execute(DataSet dataSet, CancellationToken cancellationToken) { try { var date = DateTimeOffset.Now.Date; var subscriptionOrder = from co in this.UnitOfWork.GetRepository <CustomerOrder>().GetTable() join sb in this.UnitOfWork.GetRepository <SubscriptionBrasseler>().GetTable() on co.Id equals sb.CustomerOrderId where co.Status == "SubscriptionOrder" && (DbFunctions.TruncateTime(sb.NextDelieveryDate) == DbFunctions.TruncateTime(date)) select sb; JobLogger.Info(subscriptionOrder.Count() + " :Count of Subscription Order"); if (subscriptionOrder.Count() == 0) { return; } JobDefinition jobDefinition = (from jd in this.UnitOfWork.GetRepository <JobDefinition>().GetTable() join jds in this.UnitOfWork.GetRepository <JobDefinitionStep>().GetTable() on jd.Id equals jds.JobDefinitionId join jdsp in this.UnitOfWork.GetRepository <JobDefinitionStepParameter>().GetTable() on jds.Id equals jdsp.JobDefinitionStepId where jd.Name == "SmartSupply Submit Job" select jd).FirstOrDefault(); JobLogger.Info(jobDefinition.Name + " :Job Definition"); if (jobDefinition == null) { return; } foreach (var subscriptionOrderJob in subscriptionOrder) { // Check if Subscription Submit job is already scheduled. var scheduleDateTime = from ijp in this.UnitOfWork.GetRepository <IntegrationJobParameter>().GetTable() join ij in this.UnitOfWork.GetRepository <IntegrationJob>().GetTable() on ijp.IntegrationJobId equals ij.Id join jd in this.UnitOfWork.GetRepository <JobDefinition>().GetTable() on ij.JobDefinitionId equals jd.Id where jd.Name.ToUpper() == "SMARTSUPPLY SUBMIT JOB" && subscriptionOrderJob.CustomerOrderId.ToString().ToUpper() == ijp.Value.ToUpper() && DbFunctions.TruncateTime(ij.ScheduleDateTime) == DbFunctions.TruncateTime(DateTimeOffset.Now) select DbFunctions.TruncateTime(ij.ScheduleDateTime); // If Subscription Submit job is not scheduled, then schedule it. if (scheduleDateTime.Count() == 0) { Collection <JobDefinitionStepParameter> parameters = new Collection <JobDefinitionStepParameter>(); if (jobDefinition != null) { foreach (JobDefinitionStepParameter definitionStepParameter in jobDefinition.JobDefinitionSteps.SelectMany <JobDefinitionStep, JobDefinitionStepParameter>((Func <JobDefinitionStep, IEnumerable <JobDefinitionStepParameter> >)(s => (IEnumerable <JobDefinitionStepParameter>)s.JobDefinitionStepParameters))) { if (definitionStepParameter.Name.EqualsIgnoreCase("SmartSupplyOrderId")) { definitionStepParameter.Value = subscriptionOrderJob.CustomerOrderId.ToString(); } else if (definitionStepParameter.Name.EqualsIgnoreCase("Ship Now")) { definitionStepParameter.Value = "false"; } parameters.Add(definitionStepParameter); } if (parameters.Count() == 0) { return; } this.IntegrationJobSchedulingService.Value.ScheduleBatchIntegrationJob("SmartSupply Submit Job", null, parameters, null, new DateTime?(), false); JobLogger.Info("Scheduled for Customer Order ID = " + subscriptionOrderJob.CustomerOrderId + " : Scheduled Date = " + subscriptionOrderJob.NextDelieveryDate.ToString()); } } else { JobLogger.Info("Already Scheduled for Customer Order ID = " + subscriptionOrderJob.CustomerOrderId + " : Scheduled Date = " + subscriptionOrderJob.NextDelieveryDate.ToString()); } } } catch (Exception ex) { LogHelper.For(this).Error(ex); throw; } finally { } }
protected override void OnPause() { scheduler.PauseAll(); JobLogger.Info(string.Format("{0} Pause", _ServiceName)); }
/// <summary> /// 重载基类算法 /// </summary> /// <returns></returns> internal override string GenerateData() { var now = DateTime.Now; //统一记录当前运行时刻 var start = DateTime.Parse($"{DateTime.Now.Year}-{DateTime.Now.Month}-{DateTime.Now.Day}"); //统计当天时间 var end = DateTime.Parse($"{DateTime.Now.Year}-{DateTime.Now.Month}-{DateTime.Now.Day + 1}").AddSeconds(-1); var startStr = DateTime.Now.ToString("yyyy-MM-dd 00:00:00"); //统计当天时间 var endStr = end.ToString("yyyy-MM-dd-HH HH:mm:ss"); var extArray = SysAppConfig.needCutThumbExtArray; var limitCondition = this.JobParamsDoc.Double("limitCondition"); if (limitCondition <= 0) { limitCondition = 0.05; } //2015.4.13 新增错误日志发送到125.77.255.2:8023端口进行存储,后续迁移 var serverDiskAlertLimit = SysAppConfig.ServerDiskAlertLimit; System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives(); var pushInfoStr = new StringBuilder(); var detaileContent = new StringBuilder(); var needSend = false; foreach (System.IO.DriveInfo drive in drives.Where(c => c.DriveType == DriveType.Fixed || c.DriveType == DriveType.Network)) { try { if (drive.IsReady) { long totalSize = drive.TotalSize / 1024 / 1024 / 1024; //MB//总大小 long availableFreeSpace = drive.AvailableFreeSpace / 1024 / 1024 / 1024; //MB//可用大小 var usedSpace = totalSize - availableFreeSpace; //MB// var avaiablePercent = double.Parse(availableFreeSpace.ToString()) / totalSize; if (availableFreeSpace <= serverDiskAlertLimit || avaiablePercent <= limitCondition) //空间剩余5%报警 { if (pushInfoStr.Length <= 0) { pushInfoStr.AppendFormat("磁盘空间提醒:", drive.Name); } pushInfoStr.AppendFormat("{0}空间不足 ", drive.Name); detaileContent.AppendFormat("{0}总:{1}G 已用:{2}G 可用:{3}G\n\r", drive.Name, totalSize, usedSpace, availableFreeSpace); needSend = true; } } } catch (System.IO.IOException ex) { JobLogger.Info(ex.Message); } catch (Exception ex) { JobLogger.Info(ex.Message); } } if (!needSend) { return(string.Empty); } JobLogger.Info("磁盘进入警告"); var errorMessage = $"截止{start.ToString()}至{end.ToString()} {DateTime.Now:ddd} {pushInfoStr}"; var messageInfo = new PushMessageInfo() { approvalUserId = this.JobParamsDoc.Text("approvalUserId"), errorMessage = errorMessage, content = detaileContent.ToString(), logType = "4", customerCode = SysAppConfig.CustomerCode, fileStatisDate = now.ToString("yyyy-MM-dd") }; return(messageInfo.ToJson()); //模拟发送post请求 }
protected override void OnContinue() { scheduler.ResumeAll(); JobLogger.Info(string.Format("{0} Continue", _ServiceName)); }
protected override void OnStop() { scheduler.Shutdown(false); JobLogger.Info(string.Format("{0} Stop", _ServiceName)); }