Files
Common-VS2019/SacsStandardBase/Base/Utils/ExceptionUtil.cs
T
2021-06-04 14:04:03 +01:00

85 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
namespace Sarand.Net.Standard.Base.Utils
{
//=======================================================================
public static class ExceptionUtil
{
//-------------------------------------------------------------------
/// <summary>
/// Extract and cleanse exception message.
/// <para>- \r\n replaced with \n</para>
/// <para>- Duplicate lines removed.</para>
/// </summary>
public static String GetMessage (this Exception exc)
{
List<String> messageLines = new List<string>();
foreach (String messageLine in (StringUtil.EmptyOnNull(exc?.Message) ?? "").Trim().ReplaceAll("\r\n", "\n").Split('\n'))
{
if (!messageLines.ContainsCI(messageLine))
messageLines.Add(messageLine);
}
return messageLines.Concat("\n");
}
//-------------------------------------------------------------------
/// <summary>
/// Generate standard exception log message.
/// <para>[ExceptionType]: [ExceptionMessage]</para>
/// <para>followed by stack entries on separate lines.</para>
/// </summary>
public static String GetErrorStateMessage (this Exception exc, bool includeExceptionType = true)
{
return (includeExceptionType ? exc.GetType().Name + ": " : "") + GetMessage(exc);
}
//-------------------------------------------------------------------
/// <summary>
/// Generate standard exception log message.
/// <para>[ExceptionType]: [ExceptionMessage]</para>
/// <para>followed by stack entries on separate lines.</para>
/// </summary>
public static String GetLogMessage (this Exception exc, int entries = 8, String stackEntryDelim = "\n\t")
{
return exc.GetType().Name + ": " + GetMessage(exc) + exc.GetStackEntries(entries).Concat("", stackEntryDelim);
}
//-------------------------------------------------------------------
/// <summary>Retrieve stack entries, up to maximum number.</summary>
public static List<String> GetStackEntries (this Exception exc, int entries = 0)
{
List<String> stackEntries = new List<string>();
stackEntries.AddRange(exc.StackTrace.Split(new String[] { "\r\n" }, (entries > 0 ? entries : 999), StringSplitOptions.None));
for (int idx = 0; idx < stackEntries.Count; idx++)
stackEntries[idx] = stackEntries[idx].Replace(" at ", "");
return stackEntries;
}
//-------------------------------------------------------------------
}
//=======================================================================
// File handling exceptions.
public class FileException : Exception
{
public FileException (string message) :
base(message)
{ }
}
public class ArchiveFileException : FileException
{
public ArchiveFileException (string message) :
base(message)
{ }
}
public class FileExistsException : FileException
{
public FileExistsException (string message) :
base(message)
{ }
}
//=======================================================================
}