首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何更好输出应用日志

日志作为应用故障排查一个重要利器,是应用开发中重要一环。但是日志如何打印、打印那些信息却没有一个非常好规范,本文根据自己多年开发经验,总结出一些日志打印实践。...好日志用一句话来说就是在正确位置输出有用信息。...当然只有这些信息还是不够,应该将输出日志时上写文也输出到日志中才能方便后续问题定位。...图片 日志最终输出格式可以选择常用JSON格式,然后上报日志统一搜集平台进行解析搜索,以下是一个请求和响应日志条目示例。...图片 图片 2.3、常见日志输出位置及内容 下表中总结了一些常见打印日志位置、消息内容及应该记录消息内容。

1.5K70

如何输出图片原始比率

背景 一些网站特别是以内容呈现为主,经常会有图片显示。一方面图片要懒加载,另一方面要设置图片占位以避免页面抖动。 懒加载这篇文章先不说,先说下图片占位中,保持图片原始宽高百分比问题。...图片原始宽高百分比,在英文里有个专有名词,Intrinsic ratio,在Google搜这个会出来很多文章。...demo jsbin.com/copogub/edi… HTML 首先设定页面上图片原始高度宽度是已知,自然百分比也是已知了 里面的$ratio为服务端渲染变量,一般4x3比率:75%,16x9...其中padding-top是控制百分比关键,padding-top百分比又是相对于宽度,具体解释文章看这里 然后里面的图片用绝对定位来撑开 .main { display: inline-block...; /* 注意这里设置是max-width,而不是width,以兼容小图片 */ width: 200px; .intrinsic { position: relative;

1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CS143:编译原理|PA2:正则表达式和词法分析

    无论如何,这个过程是非常重要。 项目给我们提供了测试用例test.cl,以及一个完整lexer。...无论如何,运行这个lexer,并给它传递test.cl测试用例,可得到形如上面代码块输出。 我写了一个简单Python脚本,用来比较我们lexer和标准lexer输出。 #!...在正式开始研究flex之前,我们先看看assignments/PA2目录下各个代码文件,是如何被编译成lexer可执行文件,以及处理一些小错误。...正则表达式在新一行开头写,和行首之间一定没有空格,否则这些空格被当做正则表达式一部分。正则表达式之后代码块和正则表达式之间一定有空格,否则{被当做正则表达式一部分。...执行lexer 阅读文件lextest.cc,可以感受flex产生C代码是如何被调用

    1.8K20

    自己动手写编译器:实现编译器工具链中词法解析工具 Flex

    我们在上一节以手动方式实现了一个词法解析器 c 语言源码。它主要包含若干部分,第一部分就是输入缓存系统,用于从磁盘文件或者控制台上获取要解析字符串。...第二部分是数据读入逻辑,它主要通过调用输入系统接口获得要解析字符串;第三部分是 DFA 状态机代码实现,它主要通过输入字符实现不同状态跳转,最后得出被识别字符串是否可以被状态机接收;最后一部分是接收状态执行代码...首先我们看lex.par 文件内容,它主要包含三部分,一部分是注释,它以@字符开始,当我们以一行行方式读取lex.par内容时,如果读入一行以字符@开始,那么我们就直接忽略它。...中PrintUnCompressedDFA,pnext,cnext, 等函数挪到 cmd.go 中,我们先看修改后 cmd.go 一部分: type CommandLine struct {...text := "输出基于 DFA 跳转表,首先我们将生成一个 Yyaccept数组,如果 Yyaccept[i]取值为 0," + "\n\t那表示节点 i 不是接收态,如果它值不是

    27320

    如何让NSLog在调试(Debug)时候输出,发布(Release)时候不输出

    更新: 在调试时候可以把所在类名、方法名、行数等相关信息也打印出来,更方便调试,更新一下宏定义 问题: 之前一直觉得用在调试时候用NSLog无所谓,但是接口有很多坑时候就需要非常多打印,然后就越来越多无用信息打印出来...,严重影响了后面的调试,而且只是希望在调试时候打印,发布时候不需要打印,然后就记得好像可以用宏定义来解决。...:表示宏定义可变参数 // __VA_ARGS__:表示函数里面的可变参数 #ifdef DEBUG #define FuLog(...)...#endif ---- 使用: 在需要用NSLog()地方可以用FuLog()替换,这样的话在Debug模式就可以打印,在Release模式下就不会打印 如何测试成不成功呢?

    1.4K20

    自己动手做编译器:实现 c 语言词法解析

    //bug here, int c = *Next; Next++; return c; } 接着我们看看如何设置 input.lex 内容,首先我们看模板文件头部内容:...另外在上面模板代码中我们增加了一个输出错误函数 yyerror,我们将其实现在模板函数中,该函数本质是对 printf封装,只不过它输出到标准错误输出,其实也是控制台,同时它使用了 c 语言可变长参数机制...{printf("AND: %s\n", yytext); /*return AND;*/} "^" {printf("XOR: %s\n", yytext); /*return XOR;*/}...;*/} "," {printf("COMMA: %s\n", yytext); /*return COMMA;*/} ";" {printf("SEMI: %s\n", yytext)...{yyerror("Illegal character\n", yytext);} %% //用于表示关键字表中一个字段 typedef struct { char* name;

    30810

    一部汽车数亿行代码!软件是如何吞噬汽车

    【CSDN 编者按】随着自动驾驶和新能源汽车到来,传统汽车行业面临数字化冲击,其中,软件迅速占领汽车制造业,将为汽车增加数亿行代码并成为整个生态链重要一环,而传统汽车行业又该如何应对?...过去十年间,内燃机动力汽车取得了快速发展,但它结局早已在冥冥之中注定。 慕尼黑技术大学信息学名誉教授、汽车软件专家Manfred Broy指出:“过去软件是汽车一部分,而如今软件决定了汽车价值。...Whydell表示,个别供应商往往对原始设备制造商如何集成ECU没有深入了解。...Whydell还表示,供应商和原始设备制造商正在研究如何将车辆周围传感器安装在不太可能在事故中损坏位置上。...此外,他们还认为,在未来十年内,软件复杂性可能还会再增加三倍。汽车制造商和供应商都在努力缩小“开发能力与生产能力之间鸿沟”。 部分问题在于如何支持稳步增长代码库。

    45330

    Serverless 架构下如何实现日志实时输出

    以日志输出为例,某个函数被触发之后未得到预期结果,大家第一想法就是查看日志,但这时输出日志可能并未是我们想要,而且云厂商输出日志延时也非常高。...日志输出现状 以腾讯云云函数为例,我们可以看一下其日志输出情况: 通过控制台或者是云 API Invoke 接口触发云函数: 通过这个测试功能,可以很快获取到函数结果,并查看日志信息。...但是无论如何,运行结果如下: 最大时间 31 最小时间 0 平均时间 17 通过这个结果,我们发现日志输出有两个问题: 时间频率不固定,通过数据可以看到,快的话可能几秒就出结果,慢的话可能十几秒,二十几秒...自建日志输出功能 通过刚才分析,我们可以知道,在线上触发函数时候,日志入库速度非常缓慢,而且极其不稳定,一定条件下会严重影响开发进度以及问题定位进度。...ConnectionId 客户端,实现实时日志输出; 当客户端断开连接之后,会触发清理函数; 清理函数会清理掉业务函数中回推地址和 ConnectionId 等信息,清理之后,业务函数再被触发,

    79220

    Mac下利用Flex和Bison实现控制台计算器

    BRE使用{1,}这种方式表示字符重a 3 文件第三部分,是% % 到% % 部分。 这里定义了词法分析器在解析处理动作。 yytext是一个flex内部标识符,表示匹配到字符串。...[a-f0-9]* { yylval=atof(yytext); return HEXADECIMAL; } /* 实数部分 *...[0-9]+|[0-9]+\.[0-9]* { yylval = atof(yytext); return INTEGER; }...---- 语法分析器bison使用 写bison文件,以.y作为后缀名结尾,和flex词法分析输入文件类似,bison输入文件也是分成3部分(不是巧合) 1 第一部分% {和% }之间,是原封不动拷贝到输出...这种文法特点是只要多向前看一个TOKEN, 就能够决定如何解析。 因此如果bison告诉你语法ambiguous时候, 可以想一想如何把自己文法改成LR(1)型文法。

    1.7K30

    如何输出清晰有效设计方案

    本文从What/How两个部分循序渐进地阐述如何输出清晰有效设计方案,希望给大家一些建立系统性设计思路启发,帮助大家更好地输出设计方案,为决策设计方案提供更有力参考。...这是设计师输出Logo提案初稿,虽然输出了28个方案之多,但没有设计思路规划,想到哪就画到哪,很多方案是重复,还有一些方案在设计初期就应该Pass,设计整个细致度也不够充分。...图形定好以后我们马上也输出了规范,Push给对接开发同学方便调用。 在输出方案过程中,始终都要紧紧贴合问题和目标,避免无效设计。...HOW: 如何输出清晰有效设计方案 那如何才能输出清晰有效设计方案呢?...学会去总结之前踩过坑,避免重复性问题,比如你输出一直存在层级不清晰问题,那么你需要关注后续输出界面里大模块之间以及元素之间层次是否还存在这个问题。

    65420

    IDL编译器实现入门

    前言 本文不对词法和语法、以及flex和bison进行介绍,如有需要,可以阅读《RPC实现》。本文试图用直接方式,以最短篇幅介绍一个最简单IDL编译器实现。 2....目标(example.idl) 本文介绍IDL编译器,能够解析如下所示IDL文件,但限于篇幅,生成C++代码部分省略掉,只介绍到对下述内容解析,以便控制篇幅和复杂度。...对service_info.h实现 main.cpp main()函数所在文件,调用解析器,并生成目标代码(本文为简单,并没有生成目标代码,而只是在屏幕上输出) Makefile 编译脚本,成功后生成编译工具...= strdup(yytext); return tok_bool; } "int16" { yylval.sval = strdup(yytext); return.../idl_compiler < example.idl,即可以观察到屏幕输出如下: request ==> int16 aaa (0, 2015) string

    2.8K42

    自己动手写编译器:实现命令行模块

    下面我们提供一个函数叫 PrintHeader,它作用是输出对未压缩 DFA C语言注释,首先我们把原来在 main 函数中那些代码挪到 CommandLine 对象构造函数中,相关代码如下:...DFA 状态就,输出对应 c 语言注释 c.nfaConverter.PrintUnCompressedDFA() //打印基于 c 语言跳转表 c.nfaConverter.PrintDriver...DoFile 之后才好实现 //TODO } 这里需要注意是,PrintDriver我们只实现了一部分,剩余部分我们还需在后面章节实现 C 语言代码模板后,上面的 TODO 部分才能接着实现..., /*State 4 */ 0 , /*State 5 */ 4 , /*State 6 */ 4 /*State 7 */ }; 可以看到,在输出...c 语言文件中,我们首先使用注释输出了跳转表内容,然后输出一个接收状态数组,如果节点 i 是接收状态,那么数组 Yyaccept[i]对应值就不是 0,要不然它对应值就是 0,下一节我们将深入研究

    19730
    领券