.NetCore WebApi通过中间件实现参数的日志打印

线上环境为了防止上下游扯皮,是有必要把接口的输入输出打印到日志中的,这样出了问题能够快速定位问题,没出问题也能直接把日志糊在对面脸上抓紧时间下班。 之前在.Net FrameWork的实现其实挺简单的,就是Global.aspx里的生命周期函数里写上就可以了,但是转到core之后,想当然的使用Filter来实现,遇到了不少问题,比如使用ActionFilter时,触发过滤器的时候,RequestB…

0评论

.NetCore的WebClient简单使用备忘

Http请求是web服务经常使用的东西,.NetCore主流使用的类库是WebClient,但是有时候经常要写一个post请求的时候,提笔忘字,防止以后忘了又得找一遍,这里直接记录一下简单的使用方法。 首先是Get请求,主要需要注意的是Encoding需要设置。 然后就是POST请求,发送一个对象作为body: 这里一定记得要设置ContentType和Encoding,不然接口会报错,因为协议不…

0评论

EasyNetQ异构异项目发布与订阅

最近因为业务架构需要,编写一个支付订单结果通知的服务,但发布方和订阅方不在同一个项目内,虽然两者的框架都是EasyNetQ,但版本差距很大,发布方是3.x,接受方是6.x,在订阅消息时遇到了一些问题,这里记录下解决方案。 首先就是市面上的所有主流消息队列框架封装的都过于完善,在发布消息和订阅消息时,会对消息的Body以外的属性,比如Header做一些额外的操作,以帮助框架完成更高级的功能,但这带来…

0评论

Serilog使用多个Logger实现多文件日志

因为一个统计业务的需求,需要将业务数据和系统日志分为两个文件进行记录,记录之后由日志收集系统收集到不同的ES的索引内,这里记录一下多Logger的配置方式。 首先必不可少的是,先安装Serilog.Expressions这个nuget包,网上查了很多资料鲜有提到需要安装这个包,导致踩了一个很深的坑,原因是更多的程序员喜欢使用代码内配置Serilog,而不是使用appsettings.json进行配…

0评论

值类型和引用类型作为参数的4种传递方式

最近在学习golang,对指针方面的一些概念有些迷惑,下了些功夫把相关的知识学习了一下,这里做个总结。 主要还是关于值传递和引用传递方面的东西,基本可以分为4种,只论结果,其他的网上已经说烂了。 值类型值传递 无论是golang、java、c#,值类型在作为参数传递时,都是深拷贝直接传递值的,因为值类型的内存分配在栈中,内存地址直接保存了值类型的真实值,在作为参数传递的时候,直接拷贝其值,所以在方…

0评论

MySql多表动态行转列

最近写了个特别复杂的业务,涉及到一个比较难写的Sql语句,在行转列的基础上需要多表动态联查,也就是说,查询结果的列数是可变的,数量根据联查的表的行数来决定,先贴出语句: CREATE DEFINER=`root`@`%` PROCEDURE `sp_getpointlist`(projectType INT) BEGIN SET @ProjectType = projectType; SET @S…

0评论

打造属于自己的GH60全键可编程键盘

介绍 GH60是geekhack论坛上一帮键盘爱好者自行设计开发制作的一款60%键盘,(即60个键的键盘),GH60是完全面向DIY玩家的,主要为了满足各种玩家对于自己想要的layout的追求。所以GH60有各种各样的layout版本,最常用的三种poker/pure/HHKB的键数分别是61、62、59。 GH60的一大牛逼之处,就在于,他的大键位区域,一般都留了多种可供玩家自由组合的孔位。可以…

0评论

使用K8S+Seafile+Onlyoffice搭建自己的云文档

之前弄了个同步盘,用的NextCloud,结果出了点啥问题连个日志都没有,根本查不到报的什么错,一气之下就卸了,什么辣鸡玩意儿,之后换了国产Seafile,用着还行,起码出了问题我能看到日志了。 用了一阵子偶然发现他这个文档不能在线协作编辑,查了下文档,可以用Onlyoffice对接实现,弄出来效果还挺不错的,不光能协作,还能聊天,欢迎来到Excel聊天室(不是。 期间踩了点坑,国内基本没有相关资…

0评论

DinD环境下的Docker层缓存

前言 现在越来越多的CICD平台都开始使用DockerInDocker环境进行自动构建,随之而来的问题就是因为构建是在容器内构建,而容器环境在任务结束时会就地销毁,导致下一次构建时无法使用上次构建的缓存,基础镜像和项目依赖全部都要重新构建,对于企业大型项目来说,动辄十来分钟的构建时间不提,国内下载项目依赖包的时候还有可能会导致超时失败,如此不稳定的工作流对于CICD肯定是无法接受的。 为了解决这个…

0评论

Docker搭建自己的企业级CICD(四)Drone的CD

终于到了最激动人心的时刻了,自动化部署! Docker环境下的自动部署不同于k8s,没有容器编排工具的情况下,实际上就是使用ssh的方式敲命令docker run而已。 编写.drone.yml 接着我们前文中CI的后面写,把CD的步骤也加上去,这里提供完整的yml,仍然是vue3项目: kind: pipeline type: docker name: hulu-project steps: -…

7评论