坑爹!千万不要在生产环境使用控制台日志
前言
某控制台应用程序会随机卡死,一直找不到原因。无意中在控制台敲了下回车,发现程序居然恢复正常了。
最后在stackoverflow上找到了这个帖子:How and why does QuickEdit mode in Command Prompt freeze applications?[1]
原来是“快速编辑模式”造成的。
快速编辑模式
快速编辑模式是Windows的一项功能,它允许用户在命令提示符窗口中使用鼠标选择文本(单击并在所需文本上拖动鼠标)。默认情况下此功能是开启的:
不知是何原因,应用程序所在控制台接收到了鼠标事件,导致进入快速编辑模式,等待我们确定选中文本,而这时应用程序需要向控制台输出日志,结果导致死锁。
所以解决方案是关闭快速编辑模式。
关闭快速编辑模式
可以在“控制台窗口 属性”中设置默认值,取消“快速编辑模式”选项。
但是,为了避免部署时疏漏,使用代码自动禁用应用程序的快速编辑:
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
坑爹!千万不要在生产环境使用控制台日志相关推荐
- 解决生产环境上日志报事务回滚的问题
日志报错代码 : [10-6-12 9:44:01:602 GMT+08:00] 0000004d LocalTranCoor W WLTC0033W: 清除 LocalTransactionCont ...
- log4j2 在开发环境(win)和测试环境(win)下均可以输出日志,但在生产环境(linux)无日志输出
一.问题说明:在开发环境和测试环境下均可以输出日志,但在生产环境无日志输出. 二.发现问题: 1,系统不同: 开发环境和测试环境(windows) 生 ...
- 生产环境实施 VMware 虚拟化基础架构,千万不要犯 4 个错误
生产环境实施 VMware 虚拟化基础架构,千万不要犯 4 个错误 https://mp.weixin.qq.com/s?__biz=MjM5NTk0MTM1Mw==&mid=26506304 ...
- asp.net生产环境和开发环境的错误日志包装策略
对于错误日志的输出,我们借助web.config的两个标志位: <!--全局包装异常处理页面,只有在PageError和Application_Error做清除错误操作才可不跳转--> & ...
- Python开发【项目】:生产环境下实时统计网站访问日志信息
日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...
- centos 日志审计_生产环境日志审计
日志审计,就是记录所有系统和相关用户行为的信息,并且可以自动分析,处理.在中小企业环境中,一般都是在单个服务器上记录日志,而大型企业的生产环境当中,会有专门的日志服务器乃至集群.本文通过sudo配合c ...
- oracle 11g删除归档日志,oracle 11g生产环境清理归档日志脚本
最近几个客户生产环境都遇到一些故障,原因就是开归档,没有部署删除归档定时任务,以下大家可以参考,经过本人测试,在生产环境上正常运行. **roidba删除归档日志脚本** 一.基于RHEL6服务器端的 ...
- 15分钟从零开始搭建支持10w+用户的生产环境(三)
上一篇文章介绍了这个架构中,选择MongoDB做为数据库的原因,及相关的安装操作. 原文地址:15分钟从零开始搭建支持10w+用户的生产环境(二) 三.WebServer 在SOA和gRPC大行其 ...
- Sentinel(十五)之在生产环境中使用 Sentinel
转载自 在生产环境中使用 Sentinel 引言 Sentinel 目前已可用于生产环境,除了阿里巴巴以外,也有很多企业在生产环境中广泛使用 Sentinel. 生产环境的 Sentinel Das ...
最新文章
- webstorm怎么跑项目_怎么跑Mint-UI的实例,你知道吗?
- php asp.net des,转DES的dotNet到php实现
- 【测试】软件测试用例设计
- javascript之Bom简介
- Notice: Undefined offset 的解决方法
- 电压的单位dBuV,dBmV和dBV以及dBu和dB的转化关系
- 设计学习---《大象》之系统分析
- 数据结构(C语言)超详细视频教程
- 中国物联网激荡20年
- 对象转换成Json字符串是时中文乱码
- 可替代50欧姆_50欧姆阻抗四层板射频信号隔层参考做不了吗?
- COMSOL学习(一)
- 怎么更改智联上的手机号,原先的号不用了
- 全国计算机等级考试Java上机真题
- 我与我的专业计算机网络作文,我与网络的故事作文600字
- 代购彷徨,《电商法》指路
- 拼音爱好者的好消息:紫光V6发版
- 开发者账号APP转让流程
- c语言计算支点距离,长安本科毕业论文设计-—三级齿轮减速器的优化设计(附c语言优化计算程序代码).doc...
- JavaScript - 将 CSV 数据解析为数组