gpt4 book ai didi

c# - NLog 自定义目标 LogCat

转载 作者:行者123 更新时间:2023-11-30 23:07:23 28 4
gpt4 key购买 nike

我真的很难获得在 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 方法中打了一个断点,这个断点已经过验证。但是我从来没有达到它......

为什么?!!!残酷的世界dddd! :)

感谢您的帮助。

最佳答案

Rolf Kristensen 在评论中给了我答案:

只需在我的 RegisterNlog() 末尾添加 NLog.LogManager.ReconfigExistingLoggers(); 就可以了!

这在文档 ( https://github.com/NLog/NLog/wiki/Configuration-API ) 中没有提到,或者我错过了。

谢谢罗尔夫!

关于c# - NLog 自定义目标 LogCat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47335911/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com