我真的很难在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中设置了一个断点,这是一个不可避免的。但我从来没有达到它......
为什么?!!!?残酷的worlddddd! :)
感谢您的帮助。
答案 0 :(得分:1)
Rolf Kristensen在评论中给了我答案:
只需在NLog.LogManager.ReconfigExistingLoggers();
的末尾添加RegisterNlog()
即可!
在文档(https://github.com/NLog/NLog/wiki/Configuration-API)中没有提及,或者我错过了它。
谢谢罗尔夫!