前言

在Nancy中有个十分不错的功能-Diagnostics,可以说这个功能让人又爱又恨。

或许我们都做过下面这样的一些尝试:

  • 记录某一个功能用到的相关技术信息

  • 记录下网站的访问记录

  • 全局配置某些框架内部功能的开关

  • .....

当然,对于上面提到的这些东西,现在都有非常成熟的解决方案可以用。

不过,Nancy在内部也实现了这样的一个机制,可以让我们比较方便的处理这些问题。

下面我们先来看看具体是如何使用的!本文也是着重于如何使用。

如何使用

由于在Nancy1.x与2.x中的差别,在使用Diagnostics的用法上也有了略微较大的差别。

截至在本文编写之前(2017-06-26),Nancy在GITHUB上面的相关介绍还是基于1.x的。而本文是用2.0作为例子演示的,当然也有与1.x的简单对比。

在2.0中,Diagnostics的启用是通过在Bootstrapper中的Configure方法启用,而在1.x中是通过重写一个DiagnosticsConfiguration类型的属性来启用。

下面是两个大版本之间的使用方法:

2.0的使用如下:

public override void Configure(INancyEnvironment environment)
{
environment.Diagnostics(password: "123");
base.Configure(environment);
}

1.x的使用如下:

protected override DiagnosticsConfiguration DiagnosticsConfiguration
{
get { return new DiagnosticsConfiguration { Password = "123"}; }
}

其中,2.0中的写法是通过INancyEnvironment的一个扩展方法来实现的。

当我们只指定密码的时候,就表示我们要开启这个功能了。其本质就是在当前的environment中添加Diagnostics的相关配置。

需要注意的是,我们指定的密码不能为空!如果为空就会提示Diagnostics的配置不正确。

相比1.x,个人觉得2.0的写法应该是更推荐的写法,因为 Diagnostics在Nancy中是一个功能模块,并且是由用户去决定是否去启用的,所以在Bootstrapper这样一个启动器中为一个功能模块单独设计一个属性来标识是否启用,感觉有那么一点累赘,如果这样的属性一多,就会造成Bootstrapper比较臃肿,而在配置方法中去统一管理这些配置项会简洁许多。这样的做法就有点类似ASP.NET Core中Startup类的Configure方法。比较符合按需加载的特性。

在启用这个功能之后,我们可以通过访问默认地址 http://yourdomain.com/_Nancy 去访问相关的功能。当第一次打开的时候会进入一个登录页面。

在文本框中输入我们设置的密码后就可以进入到Diagnostics的主面板了。

通过主面板上面的信息,我们可以看到有下面4个主要内容:Information、Interactive Diagnostics、Request Tracing和Settings

下面分别来看看这些内容:

Information

Information主要是记录了当前站点使用Nancy的相关配置信息:

这里主要包含两个部分的信息,第一部分是Nancy的相关信息,第二部分是配置的相关信息。

在第一部分中,可以看到当前用的Nancy版本是2.0,根路径、视图引擎等信息。我们这里用的Hosting是Kestrel

这里没有正确的加载出来,里面应该是有些问题细节还没有处理好的。

在第二部分中,就是当前站点使用的一些配置信息,由于并没有重写相关的配置,所以可以看到清一色的Default.

Interactive Diagnostics

这里在默认的情况下也是有两个模块,一个是缓存的路由信息,一个是测试相关的Provider。

这里主要看一下路由的信息。

如果看过我下面这篇博客,对怎么取到这些路由信息的,就会比较清楚。

浅析如何在Nancy中生成API文档

下面还有Finalize和MemberwiseClone这两个方法,可以按照字面上的意思去理解,不过似乎并没有发现什么实际性的作用,所以这里就不深入说明了。

Request Tracing

默认情况下,Request Tracing 是没有开启的,所以这个时候打开这个部分只能看到No Sessions found

想要开启Tracing,同样是在Bootstrapper的Configure方法中开启。

public override void Configure(INancyEnvironment environment)
{
environment.Diagnostics(password:"123"); environment.Tracing(enabled: true, displayErrorTraces: true); base.Configure(environment);
}

当开启之后,再打开这个页面时,

就可以看到Trace了一个会话

点进去可以看到这个session更多详细的信息:

左边列出了每一个请求的精简信息,右边是详细的信息。

注:对于Request Tracing,Nancy限制了最多只能存储500个会话,每个会话只能存储50个请求。内部是通过维护一个线程安全的队列来处理的,每当其超过上限时,就会进行出队操作,将最先记录的移出队列。所以在这里,我们能看到的永远是最新的会话和最新的请求。

Settings

Setting这里读取的是StaticConfiguration的内容。就2.0来说,个人暂时没有发现 这一个板块的内容有太大的作用。

在2.0中,默认情况下我们能看到的东西就一个!原因很简单,2.0中的大部分配置项已经没有使用StaticConfiguration这个静态类来设置了。

同时也回顾对比一下1.x中的setting页面,对比一下两者的默认配置项:

可以看到1.x配置项比2.0多了不少!在1.x中设置可以直接影响站点的相关配置。例如:选中Disable Error Traces,那么站点就会禁用掉Error Traces。

这里可以说是功能开关。

自定义配置

上面的示例中,我们是通过默认地址 http://yourdomain.com/_Nancy 去访问的,

如果说,我们开启了这个功能,但是什么配置都没有改,就会有可能让其他人看到我们站点的大部分信息。所以正常情况下,都是不会用这个默认地址的,毕竟这是在Nancy内部设置的一个默认地址。我们通过上面提到的Diagnostics这个扩展方法来替换我们的默认路径。

public override void Configure(INancyEnvironment environment)
{
environment.Diagnostics(
password:"123",
path:"_dash"//设置为http://yourdomain.com/_dash
); environment.Tracing(enabled: true, displayErrorTraces: true); base.Configure(environment);
}

此时再一次访问 http://yourdomain.com/_Nancy 就会提示404了(前提是没有其他的请求指向这个地址)。

只有输入我们设置的地址才能正常访问!后续的操作就和上面介绍的一样了。

另外,我们能配置的除了密码,和访问地址外,还可以设置控制面板的过期时间以及相关的加密配置。

更多使用方法可以参考下面的链接:

https://github.com/NancyFx/Nancy/wiki/Diagnostics

总结

本文简单的介绍了如何使用Nancy的Diagnostics功能,如果真的使用这个功能,可能下面的2个情况需要注意一下:

  • 密码尽可能要设置的复杂一点
  • 最好能修改默认的访问路径

为什么说这个Diagnostics让人又爱又恨呢?这个功能可以说是十分强大,也可以说是并没有什么作用。当然这也主要是取决于怎么用。

对于一个Web框架来说,考虑到的东西比较齐全、比较深入,对我们开发者来说是十分值得借鉴的。在此同时,给我们的日常维护也带来了便利之处。

这里的一系列功能是没有持久化的,我们可以在这里的基础上对他进行持久化,这样就可以强化这一个功能。

如果说一个公司有强大的服务器团队,那么这个功能就可能会变得没有太大的展示空间。毕竟人家会有一套更专业的东西去管理,监控网站的相关信息,而且记录的内容,信息也会比Diagnostics多上N个等级。

在下一篇将会详细介绍这个功能的实现。

本文已经同步到Nancy之大杂烩

谈谈Nancy中让人又爱又恨的Diagnostics【上篇】的更多相关文章

  1. Lambda-让人又爱又恨的“->"

    写在前边 聊到Java8新特性,我们第一反应想到的肯定是Lambda表达式和函数式接口的出现.要说ta到底有没有在一定程度上"优化"了代码的简洁性呢?抑或是ta在一定程度上给程序员 ...

  2. 让人又爱又恨的char(字符型)

    今天来总结一下char型,平常写算法的时候对这个东西感觉都有一点绕着走,说到底还是对这部分的知识不熟悉所以有点怕他,不过以后不要怕,今天来总结一下 首先,说到字符型数据类型,char型,恩它是一种数据 ...

  3. 让人又爱又恨的this

    this是个神奇的东西, 既可以帮助我们把模拟的类实例化. 又可以在事件绑定里准确指向触发元素. 还可以帮助我们在对象方法中操作对象的其他属性或方法. 甚至可以在使用apply.call.bing.f ...

  4. 让人又爱又恨的Lombok,到底该不该用

    1 简介 Lombok,印尼的一个岛屿,龙目岛.但在Java的世界里,它是一个方便的类库,能提供很多便利,因此得到许多人的青睐.但也有不少反对声音.这是为什么呢? 之前去龙目岛拍的日落. 2 Lomb ...

  5. MySQL让人又爱又恨的多表查询

    1. 前言 在SQL开发当中,多表联查是绝对绕不开的一种技能.同样的查询结果不同的写法其运行效率也是千差万别. 在实际开发当中,我见过(好像还写过~)不少又长又臭的查询SQL,数据量一上来查个十几分钟 ...

  6. 浅析如何在Nancy中生成API文档

    前言 前后端分离,或许是现如今最为流行开发方式,包括UWP.Android和IOS这样的手机客户端都是需要调用后台的API来进行数据的交互. 但是这样对前端开发和APP开发就会面临这样一个问题:如何知 ...

  7. nancy中的身份验证

    在nancy中,身份验证分为basic ,form ,token,stateless几种,basic和form这里不说了,其中如果是使用cookie来保存身份的, 需要注意的是:cookie有大小的限 ...

  8. 谈谈Integer中的静态类IntegerCache

            学习的本质就是一个赋值的过程,用新知识来覆盖你的旧知识或者无知(null).掌握知识是自己的, 分享知识,才能帮助更多的人,创造更大的价值.学贵以恒,以此自勉,与君共享.----曦阳X ...

  9. 谈谈javascript中的prototype与继承

    谈谈javascript中的prototype与继承 今天想谈谈javascript中的prototype. 通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性 ...

随机推荐

  1. TPshop中B2C与B2B2C的一点理解

    首先来一段百度百科记录一下: B2C 是Business-to-Customer的缩写,而其中文简称为"商对客"."商对客"是电子商务的一种模式,也就是通常说的 ...

  2. java泛型探索——小特性

    泛型特性(小篇幅) 1. 补充介绍一些常见的泛型特性: 类型参数T可以是recursive(类似递归性),它的边界可以是类型参数是自身的接口或类. 如我实现寻找最大值的方法,可以这么写: public ...

  3. 为Play初学者准备的Scala基础知识

    1 前言 本文的主要目的是为了让Play Framework的初学者快速了解Scala语言,算是一篇Play Framework的入门前传吧.使用PlayFramework可以极大的提高开发效率,但是 ...

  4. yaf学习之——yaf安装

    yaf的github源码地址 https://github.com/laruence/yaf 第一步: 下载dll扩展: http://pecl.php.net/package/yaf/2.3.5/w ...

  5. Not supported by Zabbix Agent & zabbix agent重装

    zabbix服务器显示一些监控项不起效,提示错误[Not supported by Zabbix Agent], 最后定位为zabbix客户端版本过低. Not supported by Zabbix ...

  6. 从LINQ开始之LINQ to Objects(下)

    前言 上一篇<从LINQ开始之LINQ to Objects(上)>主要介绍了LINQ的体系结构.基本语法以及LINQ to Objects中标准查询操作符的使用方法. 本篇则主要讨论LI ...

  7. javascript基础-BOM原理

    图解:  1. Loction: 拼接参数时,应编码decodeURIComponent/encodeURIComponent(). 2. History: pushState+replaceStat ...

  8. 使用VideoView开发视频总结

    一.VideoView及其相关组件总结 在Android中,播放视频有2种方式,第一种方式是使用MediaPlayer结合SurfaceView来播放,通过MediaPlayer来控制视频的播放.暂停 ...

  9. 2.Node.js access_token的获取、存储及更新

    文章目录:         1.Node.js 接入微信公众平台开发         2.Node.js access_token的获取.存储及更新 一.写在前面的话   上一篇文章中,我们使用 No ...

  10. Java中设计模式之装饰者模式-3

    装饰者模式: 动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更加有弹性的替代方案. 装饰者核心:实现功能组合 继承与组合区别: 继承 继承是给一个类添加行为的比较有效的途径.通过使用继承, ...