using HslCommunication;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.LogHelper;
namespace WIDESEAWCS_QuartzJob
{
///
/// Job基类,主要给子类继承记录日志方法
///
public class JobBase
{
///
/// 获取日志键值
///
public string LogKey { get; private set; }
///
/// 执行指定任务
///
///
///
public void ExecuteJob(IJobExecutionContext context, Func func)
{
bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
try
{
if (flag && value is IDevice device)
{
LogKey = $"{device.DeviceCode}-{device.DeviceName}";
}
else
{
LogKey = context.JobDetail.Key.Name;
}
}
catch (Exception ex)
{
WriteError(LogKey, ex);
}
finally
{
}
}
///
/// 将调试信息写入日志文件
///
/// 日志文件名前缀
/// 要记录的调试信息
/// 仅当配置中LogDeubgEnable为true时才会实际写入日志
public void WriteDebug(string fileName, string msg)
{
if (AppSettings.Get(new string[] { "LogDeubgEnable" }).ObjToBool())
{
StringBuilder builder = new StringBuilder(msg);
builder.Append(Environment.NewLine);
LoggerHelper.WriteLogToFile($"Debug_{fileName}", builder.ToString());
}
}
///
/// 将信息写入日志文件
///
/// 日志文件名前缀
/// 要记录的信息内容
public void WriteInfo(string fileName, string msg)
{
StringBuilder builder = new StringBuilder(msg);
builder.Append(Environment.NewLine);
builder.Append(Environment.NewLine);
LoggerHelper.WriteLogToFile($"Info_{fileName}", builder.ToString());
}
///
/// 将错误信息写入日志文件
///
/// 日志文件名前缀
/// 要记录的错误信息
public void WriteError(string fileName, string msg)
{
StringBuilder builder = new StringBuilder(msg);
builder.Append(Environment.NewLine);
builder.Append(Environment.NewLine);
LoggerHelper.WriteLogToFile($"Error_{fileName}", builder.ToString());
}
///
/// 将异常信息写入日志文件
///
/// 日志文件名前缀
/// 要记录的异常对象
///
/// 该方法会收集异常的详细信息,包括消息、来源、堆栈跟踪、类型和目标站点,
/// 并通过QuartzLogger将信息写入以"Error_"为前缀的日志文件中
///
public void WriteError(string fileName, Exception ex)
{
StringBuilder builder = new StringBuilder();
builder.Append(StringResources.Language.ExceptionMessage);
builder.Append(ex.Message);
builder.Append(Environment.NewLine);
builder.Append(StringResources.Language.ExceptionSource);
builder.Append(ex.Source);
builder.Append(Environment.NewLine);
builder.Append(StringResources.Language.ExceptionStackTrace);
builder.Append(ex.StackTrace);
builder.Append(Environment.NewLine);
builder.Append(StringResources.Language.ExceptionType);
builder.Append(ex.GetType().ToString());
builder.Append(Environment.NewLine);
builder.Append(StringResources.Language.ExceptionTargetSite);
builder.Append(ex.TargetSite?.ToString());
builder.Append(Environment.NewLine);
builder.Append(Environment.NewLine);
LoggerHelper.WriteLogToFile($"Error_{fileName}", builder.ToString());
}
///
/// 将错误信息和异常详情写入日志文件
///
/// 日志文件名前缀
/// 自定义错误消息
/// 发生的异常对象
///
/// 该方法会格式化异常信息,包括消息、来源、堆栈跟踪、类型和目标站点,
/// 并通过QuartzLogger写入到以"Error_"为前缀的日志文件中
///
public void WriteError(string fileName, string msg, Exception ex)
{
StringBuilder builder = new StringBuilder(msg);
builder.Append(Environment.NewLine);
builder.Append(StringResources.Language.ExceptionMessage);
builder.Append(ex.Message);
builder.Append(Environment.NewLine);
builder.Append(StringResources.Language.ExceptionSource);
builder.Append(ex.Source);
builder.Append(Environment.NewLine);
builder.Append(StringResources.Language.ExceptionStackTrace);
builder.Append(ex.StackTrace);
builder.Append(Environment.NewLine);
builder.Append(StringResources.Language.ExceptionType);
builder.Append(ex.GetType().ToString());
builder.Append(Environment.NewLine);
builder.Append(StringResources.Language.ExceptionTargetSite);
builder.Append(ex.TargetSite?.ToString());
builder.Append(Environment.NewLine);
builder.Append(Environment.NewLine);
LoggerHelper.WriteLogToFile($"Error_{fileName}", builder.ToString());
}
}
}