alielie
2025-03-28 dedcf4174c8540ee3a912daad2ff13e014e495b1
HMI.LogViewer/LogViewer.xaml.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
@@ -16,8 +17,6 @@
    /// </summary>
    public partial class LogViewer : PluginControl
    {
        private string logDir;
        private string todayLogFile;
        private bool autoRfh;
@@ -36,42 +35,34 @@
        public LogViewer()
        {
            string logDir = Path.Combine(PathHelper.AppFolder, "Log");
            todayLogFile = Path.Combine(logDir, $"log{DateTime.Now.ToString("yyyy-MM-dd")}.db");
            if (!Directory.Exists(logDir))
            {
                Directory.CreateDirectory(logDir);
            }
            this.logDir = logDir;
            DataContext = this;
            InitializeComponent();
        }
        public override void InitFinish()
        {
            base.InitFinish();
            string baseFile = Path.Combine(logDir, "log.db");
            //base.InitFinish();
            //string baseFile = Path.Combine(logDir, "log.db");
            try
            {
                if (!File.Exists(baseFile))
                {
                    SqliteHelper.CreateDatabase(baseFile);
                }
                SqliteHelper sqliteHelper = new SqliteHelper(baseFile);
                sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS log (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    type TEXT NOT NULL,
                    text TEXT NOT NULL,
                    source TEXT,
                    time TIME
                    );");
            }
            catch (Exception ex)
            {
                log.Error("Create Log File Failed.", ex);
            }
            //try
            //{
            //    if (!File.Exists(baseFile))
            //    {
            //        SqliteHelper.CreateDatabase(baseFile);
            //    }
            //    SqliteHelper sqliteHelper = new SqliteHelper(baseFile);
            //    sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS log (
            //        id INTEGER PRIMARY KEY AUTOINCREMENT,
            //        level TEXT NOT NULL,
            //        text TEXT NOT NULL,
            //        source TEXT,
            //        time TIME
            //        );");
            //}
            //catch (Exception ex)
            //{
            //    log.Error("Create Log File Failed.", ex);
            //}
        }
@@ -113,16 +104,32 @@
        {
            try
            {
                if (startTimeInput.SelectedDateTime == null && endTimeInput.SelectedDateTime == null)
                {
                    ToastHelper.Error(this.lang("log.timeCantBeNull"));
                    return;
                }
                if (endTimeInput.SelectedDateTime != null && startTimeInput.SelectedDateTime != null &&
                endTimeInput.SelectedDateTime < startTimeInput.SelectedDateTime)
                {
                    ToastHelper.Error(this.lang("log.timeRangeError"));
                    return;
                }
                queryBtn.IsEnabled = false;
                autoRfhInput.IsEnabled = false;
                Filtrate();
                queryBtn.IsEnabled = true;
                autoRfhInput.IsEnabled = true;
            }
            catch (Exception ex)
            {
                log.Error("Log Query Failed.", ex);
                this.Error($"查询失败!{ex.Message}");
            }
            finally
            {
                queryBtn.IsEnabled = true;
                autoRfhInput.IsEnabled = true;
            }
        }
@@ -139,16 +146,43 @@
        {
            string str = LoadSql();
            DataTable dt = new DataTable();
            var files = Directory.GetFiles(logDir, "*.db");
            var files = GetOldDbFiles(PathHelper.LogViewerDir, new DateTime?[] { startTimeInput.SelectedDateTime,
                endTimeInput.SelectedDateTime });
            foreach (string file in files)
            {
                SqliteHelper sql = new SqliteHelper(file);
                dt.Merge(sql.GetDataTable(str));
                sql.Close();
            }
            dt.DefaultView.Sort = "time Desc";
            table.ItemsSource = dt.DefaultView;
        }
        public static string[] GetOldDbFiles(string folderPath, DateTime?[] range)
        {
            if (!Directory.Exists(folderPath))
            {
                return new string[0];
            }
            // 获取所有.db文件并筛选出7天前更新的文件
            var oldFiles = Directory.GetFiles(folderPath, "*.db");
            try
            {
                oldFiles = oldFiles.Where(file =>
                {
                    var lastWriteTime = File.GetLastWriteTime(file);
                    bool flag = true;
                    if (range[0] != null) flag &= lastWriteTime >= range[0];
                    if (range[1] != null) flag &= lastWriteTime <= range[1];
                    return flag;
                }).ToArray();
                return oldFiles;
            }
            catch (Exception ex)
            {
                return new string[0];
            }
        }
        /// <summary>
@@ -157,12 +191,11 @@
        /// <returns> str数据库的语句 </returns>
        private string LoadSql()
        {
            string sql = " select type,time,source,text from log";
            string sql = " select level,time,source,text from log";
            List<string> datas = new List<string>();
            if (!string.IsNullOrEmpty(levelInput.Text))
            {
                datas.Add($"type='{levelInput.Text}'");
                datas.Add($"level='{levelInput.Text}'");
            }
            if (!string.IsNullOrEmpty(startTimeInput.Text))
            {
@@ -189,22 +222,22 @@
        /// </summary>
        private void Refresh100items()
        {
            try
            {
                if (!File.Exists(todayLogFile)) return;
                string str = "select type,time,source,text from log order by time desc limit 100";
                SqliteHelper sql = new SqliteHelper(todayLogFile);
                var dt = sql.GetDataTable(str);
                this.Dispatcher.BeginInvoke((Action)delegate ()
                {
                    table.ItemsSource = dt.DefaultView;
                });
            }
            catch (Exception ex)
            {
                log.Error("Log Auto Refresh Failed.", ex);
                this.Error($"自动刷新失败!{ex.Message}");
            }
            //try
            //{
            //    if (!File.Exists(todayLogFile)) return;
            //    string str = "select type,time,source,text from log order by time desc limit 100";
            //    SqliteHelper sql = new SqliteHelper(todayLogFile);
            //    var dt = sql.GetDataTable(str);
            //    this.Dispatcher.BeginInvoke((Action)delegate ()
            //    {
            //        table.ItemsSource = dt.DefaultView;
            //    });
            //}
            //catch (Exception ex)
            //{
            //    log.Error("Log Auto Refresh Failed.", ex);
            //    this.Error($"自动刷新失败!{ex.Message}");
            //}
        }
    }
}