[英]NLog custom Target LogCat
I am really struggling to get a basic custom target working with NLog on a Xamarin Android app.我真的很难在 Xamarin Android 应用程序上获得使用 NLog 的基本自定义目标。
I'd like to create a simple target to LogCat, in order to be able to use a tag so my debug will be easier and more 'human'我想为 LogCat 创建一个简单的目标,以便能够使用标签,这样我的调试会更容易,更“人性化”
LogCatTarget.cs: 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;
}
}
}
}
in my MainApplication.cs在我的 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
}
I also have a NLog.config with a console and a file target which are working fine.我还有一个带有控制台和文件目标的 NLog.config,它们工作正常。 (This is why I am adding target and rule and not making a new config)
(这就是为什么我要添加目标和规则而不是创建新配置)
I launch my app and use a button which call all level of Android.Util.Log and those of Nlog logger我启动我的应用程序并使用一个按钮调用 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");
};
I put a break point in LogCatTarget.cs on write method, which is ovverided.我在 LogCatTarget.cs 的 write 方法上设置了一个断点,该方法是 ovverided。 But I never reach it...
但我永远达不到...
Why??:!?为什么??:!? cruel worlddddd !
残酷的世界dddd! :)
:)
Thanks for your help.谢谢你的帮助。
Rolf Kristensen gave me the answer in comments: Rolf Kristensen 在评论中给了我答案:
Simply add NLog.LogManager.ReconfigExistingLoggers();
只需添加
NLog.LogManager.ReconfigExistingLoggers();
at the end of my RegisterNlog()
did the trick !在我的
RegisterNlog()
结束时成功了!
This is not mentionned in the docs ( https://github.com/NLog/NLog/wiki/Configuration-API ), or I missed it.文档中没有提到这一点( https://github.com/NLog/NLog/wiki/Configuration-API ),或者我错过了它。
Thanks Rolf !谢谢罗尔夫!
NLog.Targets.MauiLog has been released, and supports writing to: NLog.Targets.MauiLog已经发布,支持写入:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.