wanshenmean
2026-02-11 75f34e9ba2e8b249c96333f3d7936c8968e12ec7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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
{
    /// <summary>
    /// Job基类,主要给子类继承记录日志方法
    /// </summary>
    public class JobBase
    {
        /// <summary>
        /// 获取日志键值
        /// </summary>
        public string LogKey { get; private set; }
 
        /// <summary>
        /// 执行指定任务
        /// </summary>
        /// <param name="context"></param>
        /// <param name="func"></param>
        public void ExecuteJob(IJobExecutionContext context, Func<Task> 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
            {
 
            }
        }
 
        /// <summary>
        /// 将调试信息写入日志文件
        /// </summary>
        /// <param name="fileName">日志文件名前缀</param>
        /// <param name="msg">要记录的调试信息</param>
        /// <remarks>仅当配置中LogDeubgEnable为true时才会实际写入日志</remarks>
        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());
            }
        }
 
        /// <summary>
        /// 将信息写入日志文件
        /// </summary>
        /// <param name="fileName">日志文件名前缀</param>
        /// <param name="msg">要记录的信息内容</param>
        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());
        }
 
        /// <summary>
        /// 将错误信息写入日志文件
        /// </summary>
        /// <param name="fileName">日志文件名前缀</param>
        /// <param name="msg">要记录的错误信息</param>
        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());
        }
 
        /// <summary>
        /// 将异常信息写入日志文件
        /// </summary>
        /// <param name="fileName">日志文件名前缀</param>
        /// <param name="ex">要记录的异常对象</param>
        /// <remarks>
        /// 该方法会收集异常的详细信息,包括消息、来源、堆栈跟踪、类型和目标站点,
        /// 并通过QuartzLogger将信息写入以"Error_"为前缀的日志文件中
        /// </remarks>
        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());
        }
 
        /// <summary>
        /// 将错误信息和异常详情写入日志文件
        /// </summary>
        /// <param name="fileName">日志文件名前缀</param>
        /// <param name="msg">自定义错误消息</param>
        /// <param name="ex">发生的异常对象</param>
        /// <remarks>
        /// 该方法会格式化异常信息,包括消息、来源、堆栈跟踪、类型和目标站点,
        /// 并通过QuartzLogger写入到以"Error_"为前缀的日志文件中
        /// </remarks>
        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());
        }
    }
}