ProjectArcade
69 строк · 2.1 Кб
1using System.Runtime.InteropServices;2
3namespace DokanNet.Logging4{
5/// <summary>6/// Write log using OutputDebugString7/// </summary>8/// <remarks>9/// To see the output in visual studio10/// Project + %Properties, Debug tab, check "Enable unmanaged code debugging".11/// </remarks>12public class DebugViewLogger : ILogger13{14private readonly string _loggerName;15
16/// <summary>17/// Initializes a new instance of the <see cref="DebugViewLogger"/> class.18/// </summary>19/// <param name="loggerName">Optional name to be added to each log line.</param>20public DebugViewLogger(string loggerName = "")21{22_loggerName = loggerName;23}24
25/// <inheritdoc />26public bool DebugEnabled { get { return true; } }27
28/// <inheritdoc />29public void Debug(string message, params object[] args)30{31WriteMessageToDebugView("debug", message, args);32}33
34/// <inheritdoc />35public void Info(string message, params object[] args)36{37WriteMessageToDebugView("info", message, args);38}39
40/// <inheritdoc />41public void Warn(string message, params object[] args)42{43WriteMessageToDebugView("warn", message, args);44}45
46/// <inheritdoc />47public void Error(string message, params object[] args)48{49WriteMessageToDebugView("error", message, args);50}51
52/// <inheritdoc />53public void Fatal(string message, params object[] args)54{55WriteMessageToDebugView("fatal", message, args);56}57
58[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]59private static extern void OutputDebugString(string message);60
61private void WriteMessageToDebugView(string category, string message, params object[] args)62{63if (args != null && args.Length > 0)64message = string.Format(message, args);65
66OutputDebugString(message.FormatMessageForLogging(category, _loggerName));67}68}69}