using Microsoft.AspNetCore.Hosting; using Newtonsoft.Json; using Quartz.NET.Web.Constant; using Quartz.NET.Web.Enum; using Quartz.NET.Web.Extensions; using Quartz.NET.Web.Models; using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace Quartz.NET.Web.Utility { public class FileQuartz { private static string _rootPath { get; set; } private static string _logPath { get; set; } /// /// 创建作业所在根目录及日志文件夹 /// /// public static string CreateQuartzRootPath(IWebHostEnvironment env) { if (!string.IsNullOrEmpty(_rootPath)) return _rootPath; _rootPath = $"{Directory.GetParent(env.ContentRootPath).FullName}\\{QuartzFileInfo.QuartzSettingsFolder}\\"; _rootPath = _rootPath.ReplacePath(); if (!Directory.Exists(_rootPath)) { Directory.CreateDirectory(_rootPath); } _logPath = _rootPath + QuartzFileInfo.Logs + "\\"; _logPath = _logPath.ReplacePath(); //生成日志文件夹 if (!Directory.Exists(_logPath)) { Directory.CreateDirectory(_logPath); } return _rootPath; } /// /// 初始化作业日志文件,以txt作为文件 /// /// public static void InitGroupJobFileLog(string groupJobName) { string jobFile = _logPath + groupJobName; jobFile = jobFile.ReplacePath(); if (!File.Exists(jobFile)) { File.Create(jobFile); } } public static List GetJobRunLog(string taskName, string groupName, int page, int pageSize = 100) { string path = $"{_logPath}{groupName}\\{taskName}.txt"; List list = new List(); path = path.ReplacePath(); if (!File.Exists(path)) return list; var logs = FileHelper.ReadPageLine(path, page, pageSize, true); foreach (string item in logs) { string[] arr = item?.Split('_'); if (item == "" || arr == null || arr.Length == 0) continue; if (arr.Length != 3) { list.Add(new TaskLog() { Msg = item }); continue; } list.Add(new TaskLog() { BeginDate = arr[0], EndDate = arr[1], Msg = arr[2] }); } return list.OrderByDescending(x => x.BeginDate).ToList(); } public static void WriteJobConfig(List taskList) { string jobs = JsonConvert.SerializeObject(taskList); //写入配置文件 FileHelper.WriteFile(_rootPath, QuartzFileInfo.JobConfigFileName, jobs); } public static void WriteStartLog(string content) { content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "," + content; if (!content.EndsWith("\r\n")) { content += "\r\n"; } FileHelper.WriteFile(FileQuartz.LogPath, "start.txt", content, true); } public static void WriteJobAction(JobAction jobAction, ITrigger trigger, string taskName, string groupName) { WriteJobAction(jobAction, taskName, groupName, trigger == null ? "未找到作业" : "OK"); } public static void WriteJobAction(JobAction jobAction, string taskName, string groupName, string content = null) { content = $"{jobAction.ToString()} -- {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} --分组:{groupName},作业:{taskName},消息:{content ?? "OK"}\r\n"; FileHelper.WriteFile(FileQuartz.LogPath, "action.txt", content, true); } public static void WriteAccess(string content = null) { content = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}_{content}\r\n"; FileHelper.WriteFile(FileQuartz.LogPath, "access.txt", content, true); } public static string GetAccessLog(int pageSize=1) { string path = FileQuartz.LogPath + "access.txt"; path = path.ReplacePath(); if (!File.Exists(path)) return "没有找到目录"; return string.Join("
", FileHelper.ReadPageLine(path, pageSize, 5000, true).ToList()); } public static string RootPath { get { return _rootPath; } } public static string LogPath { get { return _logPath; } } } }