XamarinのAndroidアプリでNLogを使って作業する基本的なカスタムターゲットを取得するのは本当に苦労しています。NLogカスタムターゲットLogCat
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;
}
}
}
}
:私は私のデバッグが
LogCatTarget.csを「人間より簡単になりますので、タグを使用することができるようにするために、LogCatに簡単なターゲットを作成したいと思います
私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! :)
ありがとうございました。
この呼び出しを追加するとどうなりますかNLog.LogManager.ReconfigExistingLoggers();ロギングルールを追加した後おそらく、ロガーオブジェクトはNLogの設定にターゲットを追加する前に作成されています。 InternalLoggerファイルに書かれているものは何ですか? –
私はLogManager.ReconfigExistingLoggers()を試します。 - > THHHAANKKS! – Yann