簡體   English   中英

NLog 自定義目標 LogCat

[英]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已經發布,支持寫入:

  • Android.Util.Log / LogCat
  • Apple iOS / MacOS - 統一日志記錄 OSLog(替代打印和 NSLog)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM