前面几节中,笔者介绍了Log2Net组件的方方面面。但是,有人说,我用不起来,各种头疼的小问题。下面,我们就具体的看一看要怎么把这个组件应用到实际的项目中吧。

一、Log2Net组件的发布

前文中,我们说这个组件已发布到了Nuget,应用时只需要从Nuget安装Log2Net即可。但是,它是怎么发布到Nuget的呢。修改这个组件后,想要发布到本局域网内,该怎么办呢?下文一一介绍。

1.1 发布组件到Nuget

(1)在VS开发环境中,设置组件的包属性,将组件发布为nupkg包,如下图:

在项目属性-->打包中设置的属性如上图所示。然后发布方法如下:

注意这里的目标框架只显示了第一个net45,而实际上是支持在项目文件Log2Net.csproj的TargetFrameworks节点配置的所有框架的。

(2)在https://www.nuget.org/ 上注册账号(可使用微软账号),设置你的API Key,并将该key保存到本地txt文档中;

(3)从 https://github.com/NuGetPackageExplorer/NuGetPackageExplorer 下载Nuget包管理器,然后打开第一步生成的包:

(4)点击NuGetPackageExplorer 的File-->Publish,并在随后的窗口中填入你的API Key,然后发布即可(你可以在此步骤中修改nupkg包的属性)。

这样,就将组件发布到Nuget公网啦,就可以供所有人使用啦。

1.2 发布组件到本地服务器

在有些时候,我们需要将组件进行修改后再使用,或者不想发布到公网。这时,我们也许可以直接引用生成后的DLL。但是,这样可能造成组件的版本混乱和不一致,并且在.NetCore中不能直接引用DLL,必须通过Nuget的方式引用DLL。这时,我们可以将组件发布到本地服务器(使用Nuget.Server)。方法介绍如下。

(1)新建一个空白的网站项目名为CompanyNuGetServer,NuGet中搜索NuGet.Server并安装;安装完成后,项目中会自动生成一些文件,如下图;

(2)将该项目发布到你公司/组织的服务器上,假设为192.168.0.88:16000;

(3)将nupkg包 Log2Net.1.0.6.nupkg放到 192.168.0.88:16000的 Packages文件夹下;

(4)各业务系统在使用时,在Nuget程序包设置Nuget包管理器—>程序包源中添加 http://192.168.0.88:16000/nuget 。

这样,你就将包发布到了192.168.0.88:16000上,所有能访问该网站的人都可使用该服务器上的程序包。

二、其他组件的配置和使用

各业务网站可通过前文https://www.cnblogs.com/yuchen1030/p/10992259.html 中介绍的方法使用Log2Net组件,发布和配置参照常规网站项目。若有业务网站有特殊的组件配置,则需要对这些组件/服务进行配置和部署。若业务网站不需要这些服务,则不需要部署这些组件。

2.1 RabmitMQ服务

若业务网站需要RabmitMQ方式写到数据库,则需要安装RabmitMQ组件。安装方法可参考https://www.cnblogs.com/sam-uncle/p/9050242.html 。安装后,将其作为服务启动。

2.2 InfluxDB服务

若业务网站配置需要将数据写到InfluxDB数据库,则需要安装InfluxDB数据库。安装方法可参考 https://www.cnblogs.com/shuzhenyu/p/9268506.html。安装后,将其作为服务启动(可使用NSSM工具将其封装为服务自启动)。

2.3 日志查询网站的部署

若查询网站和业务网站的日志数据库使用了SQL Swever的读写分离,则需要查询网站服务器和数据库服务器启用MSDTC分布式交易协调器,数据库服务器需要开启SQL代理,写服务器先事务发布,然后读服务器订阅该发布。

2.4 健康检查服务

Log2Net组件提供了定时采集网站服务器运行情况日志的方法。然而,我们不能保证网站服务器一直处于活跃状态。一旦网站进入休眠状态,定时服务可能会暂时停止。我们需要有一套机制来保证网站一直处于活动状态。本组件是通过定时的健康检查来实现的。

健康检查组件是一个Winform开发的小程序,为exe文件,它自动定时检查各网站,在某网站无响应时,给相关人员发送邮件(每小时内仅发送一次)。用户可可以手动检查各网站是否可访问。该组件的下载路径为  https://github.com/yuchen1030/Log2Net/tree/master/Resource/WebHealthCheck。效果如下图所示:

我们可以使用NSSM工具,将该exe文件封装为自启动的服务。NSSM的下载地址为http://www.nssm.cc/ 或 https://github.com/yuchen1030/Log2Net/tree/master/Resource/NSSM/nssm-V2.24.rar,使用方法参考https://www.cnblogs.com/TianFang/p/7912648.html 。

三、Oracle中日志组件的使用

还记得在日志组件的配置中,有两项配置叫 initTraceDBWhenOracle 和 initMonitorDBWhenOracle,分别表示是否使用EF初始化数据库Trace 表和数据库Monitor表,它们的默认值是不使用。笔者为什么要这么配置呢?这要从Oracle本身的特性谈起。

Oracle表和字段是有大小写的区别,oracle默认是大写,并且没有自增字段的概念(要使用序列来实现)。在SQL语句中,如果我们把表名/字段名用双引号括起来的就区分大小写,如果没有,系统会自动转成大写。而EF、Navicat等第三方工具在创建表/字段时,会自动加上双引号,所以对日志组件来说,EF创建的表名和字段名是区分大小写的,在SQL查询时必须加上引号才能查出数据,这对程序员来说是不友好的。因此我们不使用EF自动创建数据库,而是手动创建数据库,并使用序列实现ID字段的自增,SQL语句如下:

   CREATE TABLE Log_OperateTrace
( Id NUMBER(,) NOT NULL ,
LogTime TIMESTAMP NOT NULL ,
UserID NVARCHAR2(),
UserName NVARCHAR2(),
LogType NUMBER(,) NOT NULL ,
SystemID NUMBER(,) NOT NULL ,
ServerHost NVARCHAR2() NOT NULL ,
ServerIP NVARCHAR2() NOT NULL ,
ClientHost NVARCHAR2() NOT NULL ,
ClientIP NVARCHAR2() NOT NULL ,
TabOrModu NVARCHAR2(),
Detail NVARCHAR2() NOT NULL ,
Remark NVARCHAR2(),
CONSTRAINT PK_Log_OperateTrace PRIMARY KEY (Id) ) ; create sequence Log_OperateTrace_tb_pk_seq minvalue maxvalue
increment by
start with ; /*步长为1*/ create trigger Log_OperateTrace_tb_pk_tri
before insert on Log_OperateTrace
for each row
begin
select Log_OperateTrace_tb_pk_seq.nextval into :new.Id from dual;
end; CREATE TABLE Log_SystemMonitor
( Id NUMBER(,) NOT NULL ,
LogTime TIMESTAMP NOT NULL ,
SystemID NUMBER(,) NOT NULL ,
ServerHost NVARCHAR2() NOT NULL ,
ServerIP NVARCHAR2() NOT NULL ,
OnlineCnt NUMBER(,) NOT NULL ,
AllVisitors NUMBER(,) NOT NULL ,
RunHours BINARY_DOUBLE NOT NULL ,
CpuUsage BINARY_DOUBLE NOT NULL ,
MemoryUsage BINARY_DOUBLE NOT NULL ,
ProcessNum NUMBER(,) NOT NULL ,
ThreadNum NUMBER(,) NOT NULL ,
CurProcThreadNum NUMBER(,) NOT NULL ,
CurProcMem BINARY_DOUBLE NOT NULL ,
CurProcMemUse BINARY_DOUBLE NOT NULL ,
CurProcCpuUse BINARY_DOUBLE NOT NULL ,
CurSubProcMem BINARY_DOUBLE NOT NULL ,
PageViewNum NVARCHAR2(),
DiskSpace NVARCHAR2(),
Remark NVARCHAR2(),
CONSTRAINT PK_Log_SystemMonitor PRIMARY KEY (Id) ) ; create sequence Log_SystemMonitor_tb_pk_seq minvalue maxvalue
increment by
start with ; /*步长为1*/ create trigger Log_SystemMonitor_tb_pk_tri
before insert on Log_SystemMonitor
for each row
begin
select Log_SystemMonitor_tb_pk_seq.nextval into :new.Id from dual;
end;

以上SQL创建的数据库和字段全部为大写,在SQL语句查询时可不加引号,随意使用大小写,方便程序员使用。

至此,Log2Net组件介绍完毕,从组件的使用方法开始,剥丝抽茧地分析了其代码,最后介绍了其部署和注意事项。欢迎使用,欢迎提出问题~~

Log2Net的部署和运维的更多相关文章

  1. CEPH集群操作入门--部署和运维

    部署 预检和安装Ceph 参考 虚拟机使用ceph-deploy安装ceph 创建群集 添加/删除监视器 密钥管理 添加/删除OSD 添加/删除MDS 清除主机 管理任务   运维 操作群集 健康检查 ...

  2. FastDFS 分布式文件系统(部署和运维)

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/KamRoseLee/article/det ...

  3. 基于 Nebula Operator 的 K8s 自动化部署运维

    摘要:Nebula Operator 是 Nebula Graph 在 Kubernetes 系统上的自动化部署运维插件.在本文,你将了解到 Nebula Operator 的特性及它的工作原理. 从 ...

  4. DevOps的故事(如何整合开发和运维?)

    在一个与我们平行的世界中,有一个软件开发公司.这个公司所做的产品用户量近期增长的十分迅猛,但是令CTO头疼的是公司的两大部门:开发部和运维部近期也是“掐”得厉害.为解决这个问题,CTO决定倒入现在十分 ...

  5. 网易OpenStack部署运维实战

    OpenStack自2010年项目成立以来,已经有超过200个公司加入了 OpenStack 项目,目前参与 OpenStack 项目的开发人员有 17,000+,而且这些数字还在增加,作为一个开源的 ...

  6. centos7系统管理和运维实战

    centos7系统管理和运维实战 centos7安装配置 yum install -y net-tools >/etc/hostname echo "sqlserver01" ...

  7. dba和运维专家们说有丰富的大型分布式系统架构设计经验纯属扯淡

    如果,一开始就从事dba和运维的专家们说他们有丰富的大型分布式系统架构设计经验,那纯属扯淡.除非,他们从是从开发专家或者架构师转型而来,那么他们才有资格说自己有丰富的大型分布式系统架构设计经验. 运维 ...

  8. Harbor实现容器镜像仓库的管理和运维

    本次分享主要讲述了在开发运维中的管理容器镜像方法.为了便于说明原理,较多地使用Harbor作为例子. 内容主要包括: 开发和生产环境中镜像仓库的权限控制: 镜像远程同步(复制)的原理: 大规模应用镜像 ...

  9. 单表60亿记录等大数据场景的MySQL优化和运维之道

    此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据 ...

随机推荐

  1. SpringBoot快速入门01--环境搭建

    SpringBoot快速入门--环境搭建 1.创建web工程 1.1 创建新的工程. 1.2  选择maven工程,点击下一步. 1.3 填写groupid(maven的项目名称)和artifacti ...

  2. 求1到n的质数个数和O(n)

    也许更好的阅读体验 \(\mathcal{AIM}\) 我们知道: 对于一个合数\(x\) 有\(x=p^{a_1}_1*p^{a_2}_2*...*p^{a_n}_n\) 现在给出一个\(n\) 求 ...

  3. c语言的strcpy函数

    strcpy是用于复制字符串的函数 上面这个程序输出的结果为 为什么输出字符串%s时s是abABC,而输出字符%c时s是abABCg呢 因为strcpy函数本身的性质:复制字符串直到’\0’结束符为止 ...

  4. ajax同步与异步 理解

    例如,小明去餐馆排队点餐,前台服务员将小明的菜单告诉厨师进行制作,此时小明后面排队的人就一直等着,直到厨师制作完成,把饭菜送到小明手里后离开,后面的人才能继续点餐:这就是同步处理 但是,如果前台服务员 ...

  5. linux初学者-文件的归档和传输

      1.文件归档 因为linux系统都是以文件的形式存在,所以在处理文件时有时候因为文件太多导致传输速度慢等问题,为了提高方便并且提高效率,常把文件归档,文件归档就是把多个文件变成一个归档文件. 文件 ...

  6. C++学习之路

    一.二分查找 1.binary_search:查找某个元素是否出现. a.函数模板:binary_search(arr,arr+size ,indx) b.参数说明: arr: 数组首地址 size: ...

  7. mybatis01-1测试

    首先需要数据源信息和日志文件 然后一个SQLMapConfig.xml配置文件连接数据库并且映射后一个xml文件,另一个xml文件写入SQL语句, 最后text测试文件读取第一个配置文件,放到SQLS ...

  8. java相关的一些资源

    http://www.cnblogs.com/best/p/5876559.html#_label1

  9. Django websocket之web端实时查看日志实践案例

    这是Django Channels系列文章的第二篇,以web端实现tailf的案例讲解Channels的具体使用以及跟Celery的结合 通过上一篇<Django使用Channels实现WebS ...

  10. 我的ubuntu kylin中mentohust的使用历程

    1首先下载mentohus 最新版下载(包括源码):http://code.google.com/p/mentohust/downloads/list 2打开终端(Ctrl+Alt+T) 输入sudo ...