中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

大叔也說Xamarin~Android篇~日(ri)志(zhi)的(de)記錄

回到目錄

無論哪個平臺,開(kai)始哪種應(ying)用程序,日志(zhi)總是少(shao)不(bu)了(le)的(de)(de)(de),大(da)家在Lind.DDD里也(ye)可以看到大(da)叔(shu)的(de)(de)(de)日志(zhi)組(zu)件,而(er)在xamarin進行移動開(kai)發時(shi),為了(le)更(geng)好的(de)(de)(de)調試,記錄運行的(de)(de)(de)情況,日志(zhi)也(ye)是必須的(de)(de)(de),這講主要說一下在xamarin for android開(kai)發時(shi),日志(zhi)組(zu)件的(de)(de)(de)實現(xian)。

對于android平臺(tai)有(you)自己的(de)日(ri)(ri)志(zhi)組件,它(ta)主要(yao)在輸(shu)(shu)出窗口(kou)進行(xing)輸(shu)(shu)出,而我們有(you)時(shi)需要(yao)它(ta)將日(ri)(ri)志(zhi)寫入(ru)到磁盤,對于手機可以是sdCard等,這時(shi)就需要(yao)我們自己封裝(zhuang)一個(ge)日(ri)(ri)志(zhi)組件了。

依舊面向對象的設計

上面是(shi)在Android的綁定類(lei)庫里(li)建立的日志組件,我(wo)們的Jar原生組件也(ye)可(ke)以放在這個綁定類(lei)庫項目里(li),以后在開發時,直接引用這個項目即可(ke)

被簡化了個日志行為和級別

 /// <summary>
    /// 日志功能接口規范
    /// </summary>
    public interface ILogger
    {
        #region 級別日志
        /// <summary>
        /// 將message記錄(lu)到日(ri)志文件
        /// </summary>
        /// <param name="message"></param>
        void Logger_Info(string message);
        /// <summary>
        /// 異常發生的日志
        /// </summary>
        /// <param name="message"></param>
        void Logger_Error(Exception ex);
        /// <summary>
        /// 調試期間的日志
        /// </summary>
        /// <param name="message"></param>
        void Logger_Debug(string message);
        /// <summary>
        /// 引起程序(xu)終止的日(ri)志
        /// </summary>
        /// <param name="message"></param>
        void Logger_Fatal(string message);
        /// <summary>
        /// 引起警告的日志
        /// </summary>
        /// <param name="message"></param>
        void Logger_Warn(string message);
        #endregion

    }
   /// <summary>
    /// 日(ri)志級(ji)別:DEBUG|INFO|WARN|ERROR|FATAL|OFF
    /// </summary>
    internal enum Level
    {

        /// <summary>
        /// 記(ji)錄DEBUG|INFO|WARN|ERROR|FATAL級(ji)別的日志
        /// </summary>
        DEBUG,
        /// <summary>
        /// 記錄(lu)INFO|WARN|ERROR|FATAL級(ji)別的日志
        /// </summary>
        INFO,
        /// <summary>
        /// 記錄WARN|ERROR|FATAL級別的日志(zhi)
        /// </summary>
        WARN,
        /// <summary>
        /// 記(ji)錄(lu)ERROR|FATAL級別(bie)的(de)日志
        /// </summary>
        ERROR,
        /// <summary>
        /// 記錄FATAL級別(bie)的(de)日志
        /// </summary>
        FATAL,
        /// <summary>
        /// 關閉日志功能
        /// </summary>
        OFF,
    }

LoggerBase作(zuo)為日志實(shi)現的基類,在Lind.DDD中已經介紹過,這里只說一下文件路徑的選擇,android與pc有些不(bu)同,因為前(qian)者有sd卡的概念

     /// <summary>
        /// 日志文件(jian)地址
        /// 沒有(you)sdCard則存儲到手(shou)機上
        /// </summary>
        protected string FileUrl
        {
            get
            {

                if (Android.OS.Environment.GetExternalStorageState(Android.OS.Environment.RootDirectory).Equals(
                      Android.OS.Environment.MediaMounted))
                    return "/" + Android.OS.Environment.MediaMounted;
                else
                    return "/Logger";


            }

        }

單例模式,讓你的程序只建立一次日志實例對象

這里(li)只有(you)一個日(ri)志實現方式(shi)我就(jiu)寫死了,日(ri)后有(you)多種(zhong),可以寫在配置里(li)

    /// <summary>
    /// 日志生產類
    /// Singleton模(mo)(mo)式和策略模(mo)(mo)式和工廠模(mo)(mo)式
    /// </summary>
    public sealed class LoggerFactory : ILogger
    {
        #region Logger有多種實現時,需要使用Singleton模式
        /// <summary>
        /// 對外不(bu)能創建類的實例
        /// </summary>
        private LoggerFactory()
        {
            string type = "file";
            switch (type)
            {
                case "file":
                    iLogger = new NormalLogger();
                    break;
                default:
                    throw new ArgumentException("請正確(que)配(pei)置AppSetting的(de)LoggerType節點(file,log4net,mongodb)");
            }

        }

        /// <summary>
        /// 日志(zhi)級別
        /// </summary>
        private static Level level = Level.DEBUG;
        /// <summary>
        /// 線程(cheng)鎖
        /// </summary>
        private static object lockObj = new object();
        /// <summary>
        /// 日志工廠
        /// </summary>
        private static LoggerFactory instance;
        /// <summary>
        /// 日志(zhi)提供者,只(zhi)在本類(lei)中實(shi)例化
        /// </summary>
        private ILogger iLogger;
        /// <summary>
        /// 單例模式(shi)的日志工廠(chang)對象
        /// </summary>
        public static LoggerFactory Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (lockObj)
                    {
                        if (instance == null)
                        {
                            instance = new LoggerFactory();
                        }
                    }
                }
                return instance;
            }
        }

        #endregion

        #region ILogger 成員

        public void Logger_Debug(string message)
        {
            if (level <= Level.DEBUG)
                iLogger.Logger_Debug(message);
        }
        public void Logger_Info(string message)
        {
            if (level <= Level.INFO)
                iLogger.Logger_Info(message);
        }
        public void Logger_Warn(string message)
        {
            if (level <= Level.WARN)
                iLogger.Logger_Warn(message);
        }
        public void Logger_Error(Exception ex)
        {
            if (level <= Level.ERROR)
                iLogger.Logger_Error(ex);
        }
        public void Logger_Fatal(string message)
        {
            if (level <= Level.FATAL)
                iLogger.Logger_Fatal(message);
        }
        #endregion
    }
View Code

程序在運行之后,我們觀察sdcard的(de)根(gen)目錄,日(ri)志已經存(cun)在了

日志內容是(shi)我(wo)們進行(xing)格式(shi)化之后的,感覺還是(shi)比較清晰的

從上(shang)面的圖中可以看(kan)到,我們的日志(zhi)級(ji)別Info,Error也都體現出來了。

回到目錄

posted @ 2016-01-14 16:05  張占嶺  閱讀(2654)  評論(2)    收藏  舉報