[英]NLog custom Target LogCat
我真的很難在 Xamarin Android 應用程序上獲得使用 NLog 的基本自定義目標。
我想為 LogCat 創建一個簡單的目標,以便能夠使用標簽,這樣我的調試會更容易,更“人性化”
LogCatTarget.cs:
using NLog;
using NLog.Config;
using NLog.Targets;
using Android.Util;
namespace NLog.CustomTarget
{
[Target("LogCat")]
public sealed class LogCatTarget : TargetWithLayout
{
public LogCatTarget()
{
this.Tag = "XamTag";
}
//[RequiredParameter]
public string Tag { get; set; }
protected override void Write(LogEventInfo logEvent)
{
string logMessage = this.Layout.Render(logEvent);
SendTheMessageToLogCat(this.Tag, logMessage, logEvent.Level);
}
private void SendTheMessageToLogCat(string tag, string message, LogLevel level)
{
switch (level.Name.ToLower())
{
case ("trace"):
Log.Verbose(tag, message);
break;
case ("debug"):
Log.Debug(tag, message);
break;
case ("info"):
Log.Info(tag, message);
break;
case ("warn"):
Log.Warn(tag, message);
break;
case ("error"):
Log.Error(tag, message);
break;
case ("fatal"):
Log.Wtf(tag, message);
break;
}
}
}
}
在我的 MainApplication.cs
void RegisterNlog()
{
#if DEBUG
NLog.Common.InternalLogger.LogToConsole = true;
NLog.Common.InternalLogger.LogFile = "c:\\log.txt";
NLog.Common.InternalLogger.LogLevel = NLog.LogLevel.Trace;
//Reference custom Nlog extension for logcat
Target.Register<NLog.CustomTarget.LogCatTarget>("LogCat");
var logCatTarget = new NLog.CustomTarget.LogCatTarget();
logCatTarget.Layout = @"${message}";
logCatTarget.Tag = "coucou";
LogManager.Configuration.AddTarget("logcatname", logCatTarget);
var rule1 = new LoggingRule("*", NLog.LogLevel.Debug, logCatTarget);
LogManager.Configuration.LoggingRules.Add(rule1);
#endif
}
我還有一個帶有控制台和文件目標的 NLog.config,它們工作正常。 (這就是為什么我要添加目標和規則而不是創建新配置)
我啟動我的應用程序並使用一個按鈕調用 Android.Util.Log 和 Nlog 記錄器的所有級別
_butClear.Click += delegate
{
_txtDebug.Text = "";
_logger.Trace("logger test");
_logger.Debug("logger test");
_logger.Info("logger test");
_logger.Warn("logger test");
_logger.Error("logger test");
_logger.Fatal("logger test");
Android.Util.Log.Verbose("XXaaMMM", "logger test");
Android.Util.Log.Debug("XXaaMMM", "logger test");
Android.Util.Log.Info("XXaaMMM", "logger test");
Android.Util.Log.Warn("XXaaMMM", "logger test");
Android.Util.Log.Error("XXaaMMM", "logger test");
Android.Util.Log.Wtf("XXaaMMM", "logger test");
};
我在 LogCatTarget.cs 的 write 方法上設置了一個斷點,該方法是 ovverided。 但我永遠達不到...
為什么??:!? 殘酷的世界dddd! :)
謝謝你的幫助。
Rolf Kristensen 在評論中給了我答案:
只需添加NLog.LogManager.ReconfigExistingLoggers();
在我的RegisterNlog()
結束時成功了!
文檔中沒有提到這一點( https://github.com/NLog/NLog/wiki/Configuration-API ),或者我錯過了它。
謝謝羅爾夫!
NLog.Targets.MauiLog已經發布,支持寫入:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.