Use NLog Exception Handler, and , NLog Debug Message Printer, and change layout

This commit is contained in:
Kevin Zhang 2021-06-11 21:39:12 +08:00 committed by 张弘韬
parent 8fe285bbec
commit b955fde6e5
4 changed files with 26 additions and 27 deletions

View file

@ -184,6 +184,10 @@ namespace Flow.Launcher.Core.Plugin
// null will be fine since the results will only be added into queue if the token hasn't been cancelled // null will be fine since the results will only be added into queue if the token hasn't been cancelled
return null; return null;
} }
catch (Exception e)
{
Log.Exception("PluginManager", "Exception", e);
}
return results; return results;
} }

View file

@ -51,8 +51,9 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Ben.Demystifier" Version="0.4.1" /> <PackageReference Include="Ben.Demystifier" Version="0.4.1" />
<PackageReference Include="Microsoft.VisualStudio.Threading" Version="16.10.56" /> <PackageReference Include="Microsoft.VisualStudio.Threading" Version="16.10.56" />
<PackageReference Include="NLog.Schema" Version="4.7.0-rc1" /> <PackageReference Include="NLog" Version="4.7.10" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.9.0" /> <PackageReference Include="NLog.Schema" Version="4.7.10" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.12.0" />
<PackageReference Include="System.Drawing.Common" Version="4.7.0" /> <PackageReference Include="System.Drawing.Common" Version="4.7.0" />
<PackageReference Include="ToolGood.Words.Pinyin" Version="3.0.1.4" /> <PackageReference Include="ToolGood.Words.Pinyin" Version="3.0.1.4" />
</ItemGroup> </ItemGroup>

View file

@ -6,8 +6,10 @@ using NLog.Config;
using NLog.Targets; using NLog.Targets;
using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Infrastructure.UserSettings;
using JetBrains.Annotations; using JetBrains.Annotations;
using NLog.Fluent;
using NLog.Targets.Wrappers; using NLog.Targets.Wrappers;
using System.Runtime.ExceptionServices; using System.Runtime.ExceptionServices;
using System.Text;
namespace Flow.Launcher.Infrastructure.Logger namespace Flow.Launcher.Infrastructure.Logger
{ {
@ -26,29 +28,33 @@ namespace Flow.Launcher.Infrastructure.Logger
} }
var configuration = new LoggingConfiguration(); var configuration = new LoggingConfiguration();
const string layout = @"${logger}->${time}|${level}|${message}|${onexception:inner=${logger}->${date:format=HH\:mm\:ss}|${level}|${message}|${newline}${exception:format=toString}${newline}";
var fileTarget = new FileTarget var fileTarget = new FileTarget
{ {
FileName = CurrentLogDirectory.Replace(@"\", "/") + "/${shortdate}.txt" FileName = CurrentLogDirectory.Replace(@"\", "/") + "/${shortdate}.txt",
Layout = layout
}; };
var fileTargetASyncWrapper = new AsyncTargetWrapper(fileTarget); var fileTargetASyncWrapper = new AsyncTargetWrapper(fileTarget);
var debugTarget = new DebuggerTarget var debugTarget = new OutputDebugStringTarget
{ {
Layout = "${level:uppercase=true}|${message}" Layout = layout
}; };
configuration.AddTarget("file", fileTargetASyncWrapper); configuration.AddTarget("file", fileTargetASyncWrapper);
configuration.AddTarget("console", debugTarget); configuration.AddTarget("debug", debugTarget);
#if DEBUG #if DEBUG
var fileRule = new LoggingRule("*", LogLevel.Debug, fileTargetASyncWrapper); var fileRule = new LoggingRule("*", LogLevel.Debug, fileTargetASyncWrapper);
var debugRule = new LoggingRule("*", LogLevel.Debug, debugTarget); var debugRule = new LoggingRule("*", LogLevel.Debug, debugTarget);
configuration.LoggingRules.Add(debugRule);
#else #else
var rule = new LoggingRule("*", LogLevel.Info, fileTargetASyncWrapper); var fileRule = new LoggingRule("*", LogLevel.Info, fileTargetASyncWrapper);
var debugRule = new LoggingRule("*", LogLevel.Info, consoleTarget);
#endif #endif
configuration.LoggingRules.Add(fileRule); configuration.LoggingRules.Add(fileRule);
configuration.LoggingRules.Add(debugRule);
LogManager.Configuration = configuration; LogManager.Configuration = configuration;
} }
@ -105,22 +111,9 @@ namespace Flow.Launcher.Infrastructure.Logger
{ {
var logger = LogManager.GetLogger(classAndMethod); var logger = LogManager.GetLogger(classAndMethod);
var messageBuilder = new StringBuilder();
logger.Error("-------------------------- Begin exception --------------------------"); logger.Error(e, message);
logger.Error(message);
do
{
logger.Error($"Exception full name:\n <{e.GetType().FullName}>");
logger.Error($"Exception message:\n <{e.Message}>");
logger.Error($"Exception stack trace:\n <{e.StackTrace}>");
logger.Error($"Exception source:\n <{e.Source}>");
logger.Error($"Exception target site:\n <{e.TargetSite}>");
logger.Error($"Exception HResult:\n <{e.HResult}>");
e = e.InnerException;
} while (e != null);
logger.Error("-------------------------- End exception --------------------------");
} }
private static void LogInternal(string message, LogLevel level) private static void LogInternal(string message, LogLevel level)
@ -141,7 +134,6 @@ namespace Flow.Launcher.Infrastructure.Logger
/// <param name="message">example: "|prefix|unprefixed" </param> /// <param name="message">example: "|prefix|unprefixed" </param>
/// <param name="e">Exception</param> /// <param name="e">Exception</param>
[MethodImpl(MethodImplOptions.Synchronized)]
public static void Exception(string message, System.Exception e) public static void Exception(string message, System.Exception e)
{ {
e = e.Demystify(); e = e.Demystify();

View file

@ -3,6 +3,8 @@ using System.Windows.Threading;
using NLog; using NLog;
using Flow.Launcher.Infrastructure; using Flow.Launcher.Infrastructure;
using Flow.Launcher.Infrastructure.Exception; using Flow.Launcher.Infrastructure.Exception;
using NLog.Fluent;
using Log = Flow.Launcher.Infrastructure.Logger.Log;
namespace Flow.Launcher.Helper namespace Flow.Launcher.Helper
{ {
@ -45,4 +47,4 @@ namespace Flow.Launcher.Helper
return info; return info;
} }
} }
} }