Log2Net的部署和运维
前面几节中,笔者介绍了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的部署和运维的更多相关文章
- CEPH集群操作入门--部署和运维
部署 预检和安装Ceph 参考 虚拟机使用ceph-deploy安装ceph 创建群集 添加/删除监视器 密钥管理 添加/删除OSD 添加/删除MDS 清除主机 管理任务 运维 操作群集 健康检查 ...
- FastDFS 分布式文件系统(部署和运维)
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/KamRoseLee/article/det ...
- 基于 Nebula Operator 的 K8s 自动化部署运维
摘要:Nebula Operator 是 Nebula Graph 在 Kubernetes 系统上的自动化部署运维插件.在本文,你将了解到 Nebula Operator 的特性及它的工作原理. 从 ...
- DevOps的故事(如何整合开发和运维?)
在一个与我们平行的世界中,有一个软件开发公司.这个公司所做的产品用户量近期增长的十分迅猛,但是令CTO头疼的是公司的两大部门:开发部和运维部近期也是“掐”得厉害.为解决这个问题,CTO决定倒入现在十分 ...
- 网易OpenStack部署运维实战
OpenStack自2010年项目成立以来,已经有超过200个公司加入了 OpenStack 项目,目前参与 OpenStack 项目的开发人员有 17,000+,而且这些数字还在增加,作为一个开源的 ...
- centos7系统管理和运维实战
centos7系统管理和运维实战 centos7安装配置 yum install -y net-tools >/etc/hostname echo "sqlserver01" ...
- dba和运维专家们说有丰富的大型分布式系统架构设计经验纯属扯淡
如果,一开始就从事dba和运维的专家们说他们有丰富的大型分布式系统架构设计经验,那纯属扯淡.除非,他们从是从开发专家或者架构师转型而来,那么他们才有资格说自己有丰富的大型分布式系统架构设计经验. 运维 ...
- Harbor实现容器镜像仓库的管理和运维
本次分享主要讲述了在开发运维中的管理容器镜像方法.为了便于说明原理,较多地使用Harbor作为例子. 内容主要包括: 开发和生产环境中镜像仓库的权限控制: 镜像远程同步(复制)的原理: 大规模应用镜像 ...
- 单表60亿记录等大数据场景的MySQL优化和运维之道
此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据 ...
随机推荐
- CSharp初级篇 1-4 this、索引器、静态、常量以及只读
.NET Core CSharp初级篇 1-4 本节内容为this.索引器.静态.常量以及只读 简介 在之前的课程中,我们谈论过了静态函数和字段的一小部分知识,本节内容中,我们将详细的讲解关于对象操作 ...
- CAxWindow
AtlAxWinInit(); CAxWindow m_wndFlashPlayer; CComPtr<IShockwaveFlash> m_FlashPtr; CComPtr<IU ...
- sql nvarchar类型和varchar类型存储中文字符长度
今天遇到了,随手记录一下. sql server 存储数据里面 NVARCHAR 记录中文的时候是 一个中文对应一个字符串长度,记录英文也是一个字母一个长度 标点符号也是一样. ...
- C#编程之接口
1.定义 接口是把公共方法和属性组合起来,以封装特定功能的一个集合.(一旦定义了接口,就可以在类中实现它.这样类就可以支持接口所指定的所有属性和成员) 注意1:接口不能单独存在.不能像实例化一个类那样 ...
- 如何挑选node docker镜像
如何挑选node docker镜像 在使用Jenkins构建前端项目的时候遇到一点问题: node的版本问题. 由于可能编译的项目历史不同,所依赖的node版本也各有千秋,直接把所有项目都升级到最新的 ...
- net core 序列化与反序列化与遇到的几个坑
之前在C#里面序列化直接引入命名空间后使用JavaScriptSerializer jss = new JavaScriptSerializer();就可以用, 而net core里面不这样用了,我们 ...
- <<Modern CMake>> 翻译 2.3 与代码通信
<<Modern CMake>> 翻译 2.3 与代码通信 配置文件 CMake 允许您使用代码通过 configure_file 存取 CMake 变量. 此命令复制一个文件 ...
- mysql中的SQL语句执行的顺序
1. from2. on3. join4. where5. group by6. with7. having8. select9. distinct10. order by11. limit 例: s ...
- React Hooks 深入系列 —— 设计模式
本文是 React Hooks 深入系列的后续.此篇详细介绍了 Hooks 相对 class 的优势所在, 并介绍了相关 api 的设计思想, 同时对 Hooks 如何对齐 class 的生命周期钩子 ...
- .net持续集成单元测试篇之单元测试简介以及在visual studio中配置Nunit使用环境
系列目录 单元测试及测试驱动开发简介 什么是单元测试 单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行检验.单元测试几乎都是用单元测试框架编写的.单 ...