Commit 55ec99ae by liulongfei

操作日志框架

parent 515bb9e4
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VIZ.Package.Domain
{
/// <summary>
/// 操作日志常量
/// </summary>
public static class RecordLogConstants
{
// ===============================================================================================
// 系统
// ===============================================================================================
/// <summary>
/// 系统启动
/// </summary>
public const string SYSTEM_SET_UP = "系统启动";
// ===============================================================================================
// 操作
// ===============================================================================================
/// <summary>
/// 登录
/// </summary>
public const string OPERATE_LOGIN = "登录";
/// <summary>
/// 关闭系统
/// </summary>
public const string OPERATE_SHUTDOWN = "关闭系统";
}
}
......@@ -131,6 +131,7 @@
<Compile Include="Plugin\PluginInfo.cs" />
<Compile Include="Plugin\PluginType.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RecordLogConstants.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
......
......@@ -46,6 +46,11 @@ namespace VIZ.Package.Module
/// </summary>
private RegistryService registryService = new RegistryService();
/// <summary>
/// 操作日志服务
/// </summary>
private RecordLogService recordLogService = new RecordLogService();
// ============================================================
// Property
// ============================================================
......@@ -270,6 +275,9 @@ namespace VIZ.Package.Module
this.IsLoading = true;
// 记录操作日志
this.recordLogService.AppendLog(ApplicationConstants.APPLICATION_GROUP_NAME, RecordLogOperate.System, RecordLogTrigger.System, RecordLogConstants.SYSTEM_SET_UP);
// Step 1. 加载GH服务名列表 & VIZ服务名
this.GH_ServerName_List = ApplicationDomainEx.IniStorage.GetValue<VizConfig, string>(p => p.VIZ_GH_SERVER_NAME)
?.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries)?.ToList();
......@@ -384,6 +392,16 @@ namespace VIZ.Package.Module
ApplicationDomainEx.MainWindow = ApplicationDomainEx.MainWindowType.Assembly.CreateInstance(ApplicationDomainEx.MainWindowType.FullName) as Window;
ApplicationDomainEx.MainWindow.Show();
loginWindow.Hide();
// 记录操作日志
StringBuilder remark = new StringBuilder();
remark.Append($"GH库: {vizConfig.GH_IP}:{vizConfig.GH_Port} 服务名: {vizConfig.GH_ServerName} ");
remark.Append($"账号: {vizConfig.GH_UserName} 密码: {vizConfig.VIZ_Password} ");
remark.Append($"节目: {vizConfig.PluginGroup ?? string.Empty} ");
remark.Append($"引擎类型: {vizConfig.EngineFullType.GetDescription()} ");
remark.Append($"预览模式: {vizConfig.EnginePreviewMode.GetDescription()} ");
this.recordLogService.AppendLog(ApplicationConstants.APPLICATION_GROUP_NAME, RecordLogOperate.Operate, RecordLogTrigger.Human, RecordLogConstants.OPERATE_LOGIN, remark.ToString());
}
#endregion
......
using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VIZ.Framework.Module;
using VIZ.Package.Domain;
using VIZ.Package.Service;
using VIZ.Package.Storage;
namespace VIZ.Package.Module
{
/// <summary>
/// 应用程序启动 -- 初始化操作日志
/// </summary>
public class AppSetup_InitRecordLog : AppSetupBase
{
/// <summary>
/// 日志
/// </summary>
private static ILog log = LogManager.GetLogger(typeof(AppSetup_InitRecordLog));
/// <summary>
/// 描述
/// </summary>
public override string Detail { get; } = "应用程序启动 -- 初始化操作日志";
/// <summary>
/// 执行启动
/// </summary>
/// <param name="context">应用程序启动上下文</param>
/// <returns>是否成功执行</returns>
public override bool Setup(AppSetupContext context)
{
string workFolder = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "record_log");
if (!System.IO.Directory.Exists(workFolder))
{
System.IO.Directory.CreateDirectory(workFolder);
}
RecordLogService.LogWriter = new RecordLogWriter(workFolder);
RecordLogService.LogWriter.BeginWrite();
return true;
}
/// <summary>
/// 执行关闭
/// </summary>
/// <param name="context">应用程序启动上下文</param>
public override void Shutdown(AppSetupContext context)
{
RecordLogService.LogWriter?.Dispose();
RecordLogService.LogWriter = null;
}
}
}
\ No newline at end of file
......@@ -370,6 +370,7 @@
</Compile>
<Compile Include="Setting\VizConfig\VizConfigSettingPluginLifeCycle.cs" />
<Compile Include="Setting\VizConfig\ViewModel\VizConfigSettingViewModel.cs" />
<Compile Include="Setup\AppSetup_InitRecordLog.cs" />
<Compile Include="Setup\AppSetup_InitCSV.cs" />
<Compile Include="Setup\AppSetup_InitLiteDB_Config.cs" />
<Compile Include="Setup\AppSetup_InitLiteDB.cs" />
......
......@@ -4,12 +4,16 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VIZ.Framework.Core;
using VIZ.Package.Domain;
using VIZ.Package.Storage;
namespace VIZ.Package.Service
{
/// <summary>
/// 操作日志服务
/// </summary>
public class RecordLogService
{
/// <summary>
/// 日志写入器
/// </summary>
public static RecordLogWriter LogWriter { get; set; }
/// <summary>
/// 追加日志
/// </summary>
/// <param name="log">日志</param>
public void AppendLog(string plugin, RecordLogOperate operate, RecordLogTrigger trigger, string detail)
{
this.AppendLog(plugin, operate, trigger, detail, string.Empty);
}
/// <summary>
/// 追加日志
/// </summary>
/// <param name="log">日志</param>
public void AppendLog(string plugin, RecordLogOperate operate, RecordLogTrigger trigger, string detail, string remark)
{
if (string.IsNullOrWhiteSpace(plugin))
throw new ArgumentNullException(nameof(plugin));
if (string.IsNullOrWhiteSpace(detail))
throw new ArgumentNullException(nameof(detail));
RecordLog record = new RecordLog();
record.ID = ++RecordLog.ALL_ID;
record.DateTime = DateTime.Now;
record.Plugin = plugin;
record.Operate = operate.GetDescription();
record.Trigger = trigger.GetDescription();
record.Detail = detail;
record.Remark = remark;
LogWriter?.AppendLog(record);
}
}
}
using CsvHelper;
using log4net;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VIZ.Framework.Core;
using VIZ.Package.Domain;
using VIZ.Package.Storage;
namespace VIZ.Package.Service
{
/// <summary>
/// 操作日志写入器
/// </summary>
public class RecordLogWriter : IDisposable
{
/// <summary>
/// 日志
/// </summary>
private readonly static ILog log = LogManager.GetLogger(typeof(RecordLogWriter));
/// <summary>
/// 操作日志单文件记录条数
/// </summary>
private readonly static int LOG_ONE_FILE_MAX_RECORD = ApplicationDomainEx.IniStorage.GetValue<LogConfig, int>(p => p.LOG_ONE_FILE_MAX_RECORD);
/// <summary>
/// 日志队列
/// </summary>
private System.Collections.Concurrent.ConcurrentQueue<RecordLog> recordQueue = new System.Collections.Concurrent.ConcurrentQueue<RecordLog>();
/// <summary>
/// 任务信息
/// </summary>
private TaskInfo taskInfo;
/// <summary>
/// 任务
/// </summary>
private Task task;
/// <summary>
/// 写入流
/// </summary>
private StreamWriter streamWriter;
/// <summary>
/// CSV写入
/// </summary>
private CsvWriter csvWriter;
/// <summary>
/// 写入数量
/// </summary>
private int writeCount;
/// <summary>
/// 写入锁对象
/// </summary>
private object write_lock_object = new object();
/// <summary>
/// 工作文件夹
/// </summary>
public string WorkFolder { get; private set; }
/// <summary>
/// 操作日志写入器
/// </summary>
/// <param name="workFolder">工作文件夹</param>
public RecordLogWriter(string workFolder)
{
this.WorkFolder = workFolder;
this.streamWriter = new StreamWriter(this.GetFileName(), false, Encoding.Default);
this.csvWriter = new CsvWriter(this.streamWriter, CultureInfo.InvariantCulture);
}
/// <summary>
/// 追加日志
/// </summary>
public void AppendLog(RecordLog log)
{
this.recordQueue.Enqueue(log);
}
/// <summary>
/// 开始写入
/// </summary>
public void BeginWrite()
{
this.taskInfo = new TaskInfo();
this.task = ThreadHelper.SafeRun(this.ExecuteWrite);
}
/// <summary>
/// 销毁
/// </summary>
public void Dispose()
{
if (this.taskInfo != null)
{
this.taskInfo.IsCancel = true;
}
this.taskInfo = null;
this.task = null;
// 写入日志
this.Flush();
this.csvWriter?.Dispose();
this.streamWriter?.Dispose();
}
/// <summary>
/// 执行写入
/// </summary>
private void ExecuteWrite()
{
TaskInfo info = this.taskInfo;
while (!info.IsCancel)
{
System.Threading.Thread.Sleep(30 * 1000);
if (this.taskInfo == null || this.taskInfo.IsCancel)
return;
this.Flush();
}
}
/// <summary>
/// 将日志写入文件
/// </summary>
private void Flush()
{
lock (this.write_lock_object)
{
while (this.recordQueue.Count > 0)
{
if (!this.recordQueue.TryDequeue(out RecordLog record))
{
System.Threading.Thread.Sleep(1000);
continue;
}
try
{
this.csvWriter.WriteRecord(record);
this.csvWriter.NextRecord();
++this.writeCount;
if (this.writeCount >= LOG_ONE_FILE_MAX_RECORD)
{
this.csvWriter.Flush();
this.csvWriter.Dispose();
this.streamWriter.Dispose();
this.streamWriter = new StreamWriter(this.GetFileName(), false, Encoding.Default);
this.csvWriter = new CsvWriter(this.streamWriter, CultureInfo.InvariantCulture);
this.writeCount = 0;
}
}
catch (Exception ex)
{
log.Error(ex);
}
}
}
}
/// <summary>
/// 获取日志文件路径
/// </summary>
/// <returns>日志文件路径</returns>
private string GetFileName()
{
return Path.Combine(this.WorkFolder, $"{ DateTime.Now.ToString("yyyy_MM_dd__HH_mm_ss")}.csv");
}
}
}
......@@ -49,16 +49,41 @@
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="CsvHelper, Version=30.0.0.0, Culture=neutral, PublicKeyToken=8c4959082be5c823, processorArchitecture=MSIL">
<HintPath>..\packages\CsvHelper.30.0.1\lib\net47\CsvHelper.dll</HintPath>
</Reference>
<Reference Include="LiteDB, Version=5.0.15.0, Culture=neutral, PublicKeyToken=4ee40123013c9f27, processorArchitecture=MSIL">
<HintPath>..\packages\LiteDB.5.0.15\lib\net45\LiteDB.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=2.0.14.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.14\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.1.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.HashCode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.HashCode.1.0.0\lib\net461\Microsoft.Bcl.HashCode.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.0\lib\netstandard2.0\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Windows" />
<Reference Include="System.Xml.Linq" />
......@@ -74,6 +99,8 @@
<Compile Include="DB\ControlObject\ControlObjectService.cs" />
<Compile Include="DB\File\FileService.cs" />
<Compile Include="DB\Page\PageService.cs" />
<Compile Include="DB\RecordLog\RecordLogService.cs" />
<Compile Include="DB\RecordLog\RecordLogWriter.cs" />
<Compile Include="DB\Registry\RegistryService.cs" />
<Compile Include="Logic\Plugin\PluginService.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
......
......@@ -4,11 +4,11 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
......
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="CsvHelper" version="30.0.1" targetFramework="net48" />
<package id="LiteDB" version="5.0.15" targetFramework="net48" />
<package id="log4net" version="2.0.14" targetFramework="net48" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="1.0.0" targetFramework="net48" />
<package id="Microsoft.Bcl.HashCode" version="1.0.0" targetFramework="net48" />
<package id="Microsoft.CSharp" version="4.3.0" targetFramework="net48" />
<package id="System.Buffers" version="4.4.0" targetFramework="net48" />
<package id="System.Memory" version="4.5.0" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.4.0" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net48" />
<package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net48" />
</packages>
\ No newline at end of file
using CsvHelper.Configuration.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VIZ.Package.Storage
{
/// <summary>
/// 操作日志
/// </summary>
public class RecordLog
{
public static int ALL_ID = 0;
/// <summary>
/// 编号
/// </summary>
public int ID { get; set; }
/// <summary>
/// 时间
/// </summary>
[Format("yyyy-MM-dd HH:mm:ss")]
public DateTime DateTime { get; set; }
/// <summary>
/// 插件
/// </summary>
public string Plugin { get; set; }
/// <summary>
/// 操作
/// </summary>
/// <see cref="RecordLogOperate"/>
public string Operate { get; set; }
/// <summary>
/// 触发
/// </summary>
/// <see cref="RecordLogTrigger"/>
public string Trigger { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Detail { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VIZ.Package.Storage
{
/// <summary>
/// 操作日志操作类型
/// </summary>
public enum RecordLogOperate
{
/// <summary>
/// 系统日志
/// </summary>
[Description("系统日志")]
System,
/// <summary>
/// 操作日志
/// </summary>
[Description("操作日志")]
Operate,
/// <summary>
/// Viz命令
/// </summary>
[Description("Viz命令")]
VizCommand,
/// <summary>
/// Http请求
/// </summary>
[Description("Http请求")]
Http,
/// <summary>
/// 数据仓储
/// </summary>
[Description("数据仓储")]
Storage
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VIZ.Package.Storage
{
/// <summary>
/// 操作日志触发
/// </summary>
public enum RecordLogTrigger
{
/// <summary>
/// 手动操作触发
/// </summary>
[Description("手动")]
Human,
/// <summary>
/// 系统自动触发
/// </summary>
[Description("自动")]
System
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VIZ.Framework.Storage;
namespace VIZ.Package.Storage
{
/// <summary>
/// 日志配置
/// </summary>
public class LogConfig : IniConfigBase
{
/// <summary>
/// 单文件最多记录条数
/// </summary>
[Ini(Section = "Log", DefaultValue = "1000", Type = typeof(int))]
public string LOG_ONE_FILE_MAX_RECORD { get; set; }
}
}
......@@ -94,6 +94,7 @@
<ItemGroup>
<Compile Include="CsvDbContext.cs" />
<Compile Include="CSV\GridColumnDefintionItem.cs" />
<Compile Include="CSV\RecordLog\RecordLog.cs" />
<Compile Include="Entity\Config\HotKeyConfigEntity.cs" />
<Compile Include="Entity\Config\MediaConfigEntity.cs" />
<Compile Include="Entity\Config\PluginMappingConfigEntity.cs" />
......@@ -109,11 +110,14 @@
<Compile Include="Enum\EngineFullType.cs" />
<Compile Include="Enum\EngineType.cs" />
<Compile Include="Enum\PageType.cs" />
<Compile Include="CSV\RecordLog\RecordLogOperate.cs" />
<Compile Include="CSV\RecordLog\RecordLogTrigger.cs" />
<Compile Include="Enum\VizControlFieldType.cs" />
<Compile Include="Enum\VizControlObjectParameters.cs" />
<Compile Include="Enum\VizLayer.cs" />
<Compile Include="Enum\EnginePreviewMode.cs" />
<Compile Include="Enum\VizScene.cs" />
<Compile Include="Ini\LogConfig.cs" />
<Compile Include="Ini\VizConfig.cs" />
<Compile Include="LocalDbContext.cs" />
<Compile Include="ProjectDbContext.cs" />
......
......@@ -4,12 +4,16 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
\ No newline at end of file
......@@ -7,12 +7,16 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
\ No newline at end of file
......@@ -7,12 +7,16 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
\ No newline at end of file
......@@ -36,6 +36,8 @@ namespace VIZ.Package
AppSetup.AppendSetup(new AppSetup_InitCSV());
// 初始化LiteDB配置
AppSetup.AppendSetup(new AppSetup_InitLiteDB_Config());
// 初始化操作日志
AppSetup.AppendSetup(new AppSetup_InitRecordLog());
// 执行启动流程
AppSetupContext context = AppSetup.Setup();
......
......@@ -12,6 +12,8 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using VIZ.Framework.Module;
using VIZ.Package.Domain;
using VIZ.Package.Service;
namespace VIZ.Package
{
......@@ -20,6 +22,11 @@ namespace VIZ.Package
/// </summary>
public partial class LoginWindow : ThemedWindow
{
/// <summary>
/// 操作日志服务
/// </summary>
private RecordLogService recordLogService = new RecordLogService();
public LoginWindow()
{
InitializeComponent();
......@@ -32,8 +39,13 @@ namespace VIZ.Package
/// </summary>
private void MainWindow_Closed(object sender, EventArgs e)
{
// 记录操作日志
this.recordLogService.AppendLog(ApplicationConstants.APPLICATION_GROUP_NAME, Storage.RecordLogOperate.Operate, Storage.RecordLogTrigger.Human, RecordLogConstants.OPERATE_SHUTDOWN);
// 启动结束流程
AppSetup.ShutDown();
// 结束进程
Environment.Exit(0);
}
}
......
......@@ -14,6 +14,7 @@ using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using VIZ.Framework.Module;
using VIZ.Package.Domain;
using VIZ.Package.Service;
namespace VIZ.Package
{
......@@ -27,6 +28,11 @@ namespace VIZ.Package
/// </summary>
private readonly static ILog log = LogManager.GetLogger(typeof(MainWindow));
/// <summary>
/// 操作日志服务
/// </summary>
private RecordLogService recordLogService = new RecordLogService();
public MainWindow()
{
InitializeComponent();
......@@ -69,6 +75,9 @@ namespace VIZ.Package
/// </summary>
private void MainWindow_Closed(object sender, EventArgs e)
{
// 记录操作日志
this.recordLogService.AppendLog(ApplicationConstants.APPLICATION_GROUP_NAME, Storage.RecordLogOperate.Operate, Storage.RecordLogTrigger.Human, RecordLogConstants.OPERATE_SHUTDOWN);
// 启动结束流程
AppSetup.ShutDown();
......
......@@ -13,4 +13,7 @@ VIZ_FIELD_EDIT_DUPLET_TRIPLET_HIDDEN_FILTER=position
; Viz GH服务名: VizDbServer , 使用 "|" 分隔
VIZ_GH_SERVER_NAME=VizDbServer
; Viz 用户名: Guest|Admin , 使用 "|" 分隔
VIZ_USER_NAME=Guest|Admin
\ No newline at end of file
VIZ_USER_NAME=Guest|Admin
[Log]
; 单文件最多记录条数
LOG_ONE_FILE_MAX_RECORD=1000
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment