坑爹!千万不要在生产环境使用控制台日志

前言

某控制台应用程序会随机卡死,一直找不到原因。无意中在控制台敲了下回车,发现程序居然恢复正常了。

e1c4f6f7a9b0dcf4c26be369720cb14a.gif

最后在stackoverflow上找到了这个帖子:How and why does QuickEdit mode in Command Prompt freeze applications?[1]

原来是“快速编辑模式”造成的。

快速编辑模式

快速编辑模式是Windows的一项功能,它允许用户在命令提示符窗口中使用鼠标选择文本(单击并在所需文本上拖动鼠标)。默认情况下此功能是开启的:

242f7f4adc9cb85f675578bc8302423b.png

不知是何原因,应用程序所在控制台接收到了鼠标事件,导致进入快速编辑模式,等待我们确定选中文本,而这时应用程序需要向控制台输出日志,结果导致死锁。

所以解决方案是关闭快速编辑模式。

关闭快速编辑模式

可以在“控制台窗口 属性”中设置默认值,取消“快速编辑模式”选项。

但是,为了避免部署时疏漏,使用代码自动禁用应用程序的快速编辑:

const uint ENABLE_QUICK_EDIT = 0x0040;const int STD_INPUT_HANDLE = -10;[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GetStdHandle(int nStdHandle);[DllImport("kernel32.dll")]
static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);[DllImport("kernel32.dll")]
static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);public static void Main(string[] args)
{IntPtr consoleHandle = GetStdHandle(STD_INPUT_HANDLE);uint consoleMode;GetConsoleMode(consoleHandle, out consoleMode);consoleMode &= ~ENABLE_QUICK_EDIT;SetConsoleMode(consoleHandle, consoleMode);...
}

关闭控制台日志

在生产环境,很少需要查看控制台日志。因此,更好的方式是关闭控制台日志,这样对程序性能也有一定好处。

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.ConfigureLogging(config =>{//清空默认配置config.ClearProviders();//使用第三方log});webBuilder.UseStartup<Startup>();});

结论

本文的情况你可能永远不会碰到,但是对于这种隐患,建议你不要在生产环境使用控制台日志。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

参考资料

[1]

How and why does QuickEdit mode in Command Prompt freeze applications?: https://stackoverflow.com/questions/30418886/how-and-why-does-quickedit-mode-in-command-prompt-freeze-applications

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这五部关于海洋的纪录片,每一帧都犹如壁纸!

全世界只有3.14 % 的人关注了爆炸吧知识虽说读万卷书不如行万里路&#xff0c;但现在足不出户也能让你见识到世界各地的奇特风景。今天小编要推荐几部关于海洋的纪录片&#xff0c;这些纪录片从不同方面揭示了深海下面的奥秘&#xff0c;带你领略不一样的神秘景色。&#xff08…

UML类图几种关系的总结

在UML类图中&#xff0c;常见的有以下几种关系:泛化&#xff08;Generalization&#xff09;, 实现&#xff08;Realization&#xff09;,关联&#xff08;Association&#xff09;,聚合&#xff08;Aggregation&#xff09;,组合(Composition)&#xff0c;依赖(Dependency) 1…

Ruby:字符集和编码学习总结

背景 Ruby直到1.9版本才很好的支持了多字节编码&#xff0c;本文简单总结了今天学习的关于Ruby编码方面的知识。 字符串可以使用不同的编码 在.NET中字符串的编码是一致的&#xff0c;Ruby允许字符串有不同的编码&#xff0c;当时我就在想&#xff1a;如果两个不同编码的字符串…

Redis持久化RDB和AOF区别

RDBRDB是Redis内存到硬盘的快照&#xff0c;用于redis持久化&#xff0c;创建RDB二进制文件&#xff0c;将存储在内存中的数据&#xff0c;持久化的放到硬盘中&#xff0c;当我们需要这些数据的时候&#xff0c;启动载入RDB文件&#xff0c;数据将会被存入内存中&#xff0c;其…

央视力荐的这套书,让5岁孩子看漫画,秒懂物理,学习早“开窍”!

▲ 点击查看今年的高考&#xff0c;不得不说&#xff0c;一度被浙江学霸刷屏&#xff01;他总分720分&#xff0c;物理等3门满分的成绩&#xff0c;最终获得“浙江高考状元”。状元能摘得桂冠&#xff0c;除了日积月累的不断努力外&#xff0c;最重要的是&#xff0c;不断调整自…

MongoDB基本操作(增删改查)

2019独角兽企业重金招聘Python工程师标准>>> 基本操作 基本的“增删查改“&#xff0c;在DOS环境下输入mongo命令打开shell&#xff0c;其实这个shell就是mongodb的客户端&#xff0c;同时也是一个js的编译器&#xff0c;默认连接的是“test”数据库。 【出错】 首先…

Kubernetes + .NET Core 的落地实践

1容器化背景本来生活网&#xff08;benlai.com&#xff09;是一家生鲜电商平台&#xff0c;公司很早就停止了烧钱模式&#xff0c;开始追求盈利。既然要把利润最大化&#xff0c;那就要开源节流&#xff0c;作为技术可以在省钱的方面想想办法。我们的生产环境是由 IDC 机房的 1…

传说中的宇宙最水诺奖得主:本科历史学,却凭借“一纸”博士论文摘取诺贝尔物理学奖,出道即巅峰!...

全世界只有3.14 % 的人关注了爆炸吧知识他&#xff0c;到底是不是最水的诺奖得主&#xff1f;超模君曾经介绍了学历史&#xff0c;最终成为数学、物理大牛的威滕&#xff08;传送门&#xff09;&#xff0c;然而竟出现了德布罗意姥爷的高分点赞&#xff01;那今天&#xff0c;超…

基于事件驱动架构构建微服务第13部分:使用来自Apache KAFKA的事件并将投影流传输到ElasticSearch...

原文链接&#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part13-read-model-projection-project-streams-into-elasticsearch/在本教程中&#xff0c;我将展示如何从KAFKA读取流并将流投影到ElasticSearch中。我必须使用来自KAF…

惊呆了!这篇论文全文都是脏话,可编辑部居然对它评价极佳并发表了!

全世界只有3.14 % 的人关注了爆炸吧知识本文转自&#xff1a;募格学术你见过最奇奇怪怪的论文是什么&#xff1f;一教授为了抗议三流科学杂志发送垃圾邮件&#xff0c;回复了一篇全文只重复七个脏话字眼的论文&#xff0c;可没想到的是&#xff0c;它竟然还被 出&#xff01;版…

单IP无TMG拓扑Lync Server 2013:前端服务器

在前面的基础架构和活动目录两篇文章中&#xff0c;我们已经准备好了Lync Server的所有环境。其实今天虽然部署的是Lync Server 2013的Preview版&#xff0c;但实际上与我们部署Lync的步骤以及规范是完全一样的&#xff0c;所以大家完全可以抛开Lync Server 2013 Preview版本本…

MySQL学习笔记之五:存储引擎和查询缓存

一、存储引擎1、InnoDB⑴InnoDB是基于聚簇索引建立的&#xff0c;基于主键索引查询时&#xff0c;性能较好&#xff1b;它的辅助索引中必须包含主键列&#xff1b;因此&#xff0c;若表上的索引较多&#xff0c;为节约空间&#xff0c;主键应尽可能小⑵InnoDB支持自适应hash索引…

利用SOS扩展库进入高阶.NET6程序的调试

有时候我们可能想深入到程序的运行核心&#xff0c;去观察下内存分配情况以及堆栈内保存的东东&#xff0c;那么作为编程新贵的底层框架.NET6&#xff0c;又为我们提供了什么可用的观测工具呢&#xff1f;1.SOS 扩展是什么&#xff1f;SOS扩展库是Windows 附带的调试扩展库&…

java--用 * 打印出各种图形(新手请进)

------------------------------------ 代码&#xff1a; public class PrintTriangle { public static void main(String[] args) { System.out.println("左边正三角形"); printTopLeft(5); System.out.println("左边倒三角形&quo…

这种动作片还需要汽车特效?

1 奇奇怪怪的扣分点又增加了▼2 就是活好&#xff01;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 不愧是律师&#xff01;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 成都马拉松惊现美食街&#xff01;&#xff08;素材来源网络&#xff0c;侵…

Android之支付宝设计与开发

背景 在移动支付领域&#xff0c;支付宝支付占用巨大份额&#xff0c;根据艾瑞咨询公布的报告数据&#xff1a;2014Q3&#xff0c;支付宝斩获了82.6%的市场份额&#xff0c;在移动支付的霸主地位越来越稳固。财付通支付的发力点在微信支付和手Q支付&#xff0c;在移动支付…

秘境探索之一个.NET 对象从内存分配到内存回收

前方高能预警&#xff0c;新手慎入&#xff01;不听劝阻者&#xff0c;轻则郁闷堆积&#xff0c;重则生死看淡&#xff0c;对编程失去了念想&#xff0c;对生活失去了幻想&#xff01;好了&#xff0c;心理强大到NB的可以忽略前方若干警示。为了探索.NET对象的内存分配和回收销…

这五部关于宇宙的神级纪录片,带你探索未知的外太空世界

宇宙之大无奇不有&#xff0c;在你的认知里你又知道多少关于宇宙的事情&#xff0c;如果单单用外星人概括你所对宇宙的认知就真的太片面了&#xff0c;小编今天就带来下面这四部关于宇宙的硬核纪录片&#xff0c;带你真正的去了解关于宇宙的知识&#xff0c;让你遨游在宇宙的知…

Exceptionless服务端+kibana部署实时日志纪要

安装软件列表Exceptionless.4.1.2861.zipelasticsearch-5.6.14.zipkibana-5.6.14-windows-x86.zip安装准备1. 在D盘下创建Exceptionless文件夹2. 拷贝需要安装的软件(参照上面安装软件列表)到Exceptionless文件夹下3. 安装JDK 1.8 (C环境中已经有安装, 步骤忽略)4. …