Обнаружить исключение в логере - PullRequest
0 голосов
/ 26 марта 2020

Я хотел бы определить, регистрирует ли я только пользовательский текст или исключение.

Мой логер выглядит так:

using System;
using System.IO;
using System.Reflection;
using System.Windows;
using System.Xml.Serialization;
using Ultra_Script_WPF.User_Settings;

public class LogWriter
{
    private string m_exePath = string.Empty;
    public LogWriter(string logMessage)
    {
        LogWrite(logMessage);
    }
    public void LogWrite(string logMessage)
    {
        if (File.Exists("settings.xml"))
        {
            XmlSerializer xs = new XmlSerializer(typeof(Information));
            using (FileStream read = new FileStream("settings.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                Information info = (Information)xs.Deserialize(read);

                string EnableLogCBox = info.EnableLogging;
                bool? EnableLCBox = Convert.ToBoolean(EnableLogCBox);

                if (EnableLCBox == true)
                {
                    m_exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                    try
                    {
                        using (StreamWriter w = File.AppendText(m_exePath + "\\" + "log.txt"))
                        {
                            Log(logMessage, w);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }

            }
        }
    }

    public void Log(string logMessage, TextWriter txtWriter)
    {
        try
        {
            txtWriter.Write("\r\n");
            txtWriter.Write("{0} {1}", DateTime.Now.ToLongTimeString(),
                DateTime.Now.ToLongDateString());
            txtWriter.Write("  : {0}", logMessage);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
}

Когда регистрируется исключение, он выглядит так:


19:41:04 čtvrtek 26. března 2020  : Cryptography error (Mostly wrong password): System.Security.Cryptography.CryptographicException: Výplň je neplatná a nelze ji odebrat.
   v System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast)
   v System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
   v System.Security.Cryptography.CryptoStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   v Ultra_Script_WPF.startup_password_prompt.OK_Button_Click(Object sender, RoutedEventArgs e) v C:\Users\Honza\Desktop\Prográmko\Ultra_Script\Projects\Ultra_Script_GIT\startup_password_prompt.xaml.cs:řádek 105

Но мне не нужны средние строки, я хочу записывать только первую и последнюю запись с ошибкой, местоположением и строкой.

Могу ли я как-то определить, регистрирует ли я исключение внутри самого класса logwriter? Так что я могу сделать другое сообщение журнала для исключения и для пользовательского текста

...