博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大叔也说Xamarin~Android篇~日志的记录
阅读量:6854 次
发布时间:2019-06-26

本文共 4291 字,大约阅读时间需要 14 分钟。

无论哪个平台,开始哪种应用程序,日志总是少不了的,大家在Lind.DDD里也可以看到大叔的日志组件,而在xamarin进行移动开发时,为了更好的调试,记录运行的情况,日志也是必须的,这讲主要说一下在xamarin for android开发时,日志组件的实现。

对于android平台有自己的日志组件,它主要在输出窗口进行输出,而我们有时需要它将日志写入到磁盘,对于手机可以是sdCard等,这时就需要我们自己封装一个日志组件了。

依旧面向对象的设计

上面是在Android的绑定类库里建立的日志组件,我们的Jar原生组件也可以放在这个绑定类库项目里,以后在开发时,直接引用这个项目即可

被简化了个日志行为和级别

///     /// 日志功能接口规范    ///     public interface ILogger    {        #region 级别日志        ///         /// 将message记录到日志文件        ///         ///         void Logger_Info(string message);        ///         /// 异常发生的日志        ///         ///         void Logger_Error(Exception ex);        ///         /// 调试期间的日志        ///         ///         void Logger_Debug(string message);        ///         /// 引起程序终止的日志        ///         ///         void Logger_Fatal(string message);        ///         /// 引起警告的日志        ///         ///         void Logger_Warn(string message);        #endregion    }
   ///     /// 日志级别:DEBUG|INFO|WARN|ERROR|FATAL|OFF    ///     internal enum Level    {        ///         /// 记录DEBUG|INFO|WARN|ERROR|FATAL级别的日志        ///         DEBUG,        ///         /// 记录INFO|WARN|ERROR|FATAL级别的日志        ///         INFO,        ///         /// 记录WARN|ERROR|FATAL级别的日志        ///         WARN,        ///         /// 记录ERROR|FATAL级别的日志        ///         ERROR,        ///         /// 记录FATAL级别的日志        ///         FATAL,        ///         /// 关闭日志功能        ///         OFF,    }

LoggerBase作为日志实现的基类,在Lind.DDD中已经介绍过,这里只说一下文件路径的选择,android与pc有些不同,因为前者有sd卡的概念

    ///         /// 日志文件地址        /// 没有sdCard则存储到手机上        ///         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";            }        }

单例模式,让你的程序只建立一次日志实例对象

这里只有一个日志实现方式我就写死了,日后有多种,可以写在配置里

///     /// 日志生产类    /// Singleton模式和策略模式和工厂模式    ///     public sealed class LoggerFactory : ILogger    {        #region Logger有多种实现时,需要使用Singleton模式        ///         /// 对外不能创建类的实例        ///         private LoggerFactory()        {            string type = "file";            switch (type)            {                case "file":                    iLogger = new NormalLogger();                    break;                default:                    throw new ArgumentException("请正确配置AppSetting的LoggerType节点(file,log4net,mongodb)");            }        }        ///         /// 日志级别        ///         private static Level level = Level.DEBUG;        ///         /// 线程锁        ///         private static object lockObj = new object();        ///         /// 日志工厂        ///         private static LoggerFactory instance;        ///         /// 日志提供者,只在本类中实例化        ///         private ILogger iLogger;        ///         /// 单例模式的日志工厂对象        ///         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的根目录,日志已经存在了

日志内容是我们进行格式化之后的,感觉还是比较清晰的

从上面的图中可以看到,我们的日志级别Info,Error也都体现出来了。

转载地址:http://hzyyl.baihongyu.com/

你可能感兴趣的文章
dell服务器硬盘的状态变成外来(foreign)
查看>>
redhat6.4更换centos 6 的 yum源
查看>>
jsquery问题
查看>>
深入了解android平台的jni---编译ffmpeg源码
查看>>
共享JSP部署后测试代码
查看>>
日常订阅的开发工具和服务——2018年
查看>>
linux下乱码问题及解决方式
查看>>
回车和换行有什么区别?很尴尬》》》
查看>>
Hibernate(十六)数据库事务与隔离级别
查看>>
laravel、lumen遇到的问题解决
查看>>
MYSQL-mysqlslap
查看>>
Cisco ASA5500解决内网用公网IP不能访问DMZ区服务器的
查看>>
Windows7常用命令
查看>>
crack-jar游戏之拉阔
查看>>
Java中的深拷贝和浅拷贝
查看>>
<JQuery>页面加载函数的三种写法
查看>>
大数据系列12:Hadoop2 – 全新的Hadoop
查看>>
Result相关
查看>>
关于scrolltop 兼容 IE6/7/8, Safari,FF的方法
查看>>
PRIu64宏—打印输出64位整型值
查看>>