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

关于日志打印的几点建议

所以这也就导致了一个问题,大学毕业和工作时衔接不上最大的问题不在于技术上的难度,而是日志打印的问题。...我将针对这几个方面对系统日志的打印做一个简要的总结。...WHERE 1.程序入口 在入口打印日志是因为这个时候传递进来的参数没有经过任何处理,将它打印在日志文件中能一眼就知道程序的原始数据是否符合我们的预期,是不是传递进来的原始数据就出现 的问题。...例如,程序如果开启了INFO级别日志,DEBUG日志就不会打印,但不打印不代表不产生,这在后面会提到。通常在生产环境中开启INFO日志。 那么应该打印什么级别的日志呢?首先我们应该明确谁在看日志。...例如,新增某个用户发现已经存在时,此时虽然新增失败,但不能说程序出现错误就打印ERROR日志;在删除某个用户发现用户已经被锁定时,此时也不能说因为程序不能按照删除的逻辑继续运行下去就应该打印ERROR日志

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

    【译】如何把你的网页应用转化成PDF

    我已经在我之前的文章Designing For Print With CSS中介绍过,并且许许多多的发行社在他们发行的书中也用到了 CSS。因为 CSS 有打印专用的规范,我们就应该可以直接使用吗?...最显而易见的就是当你在打印某些网页应用的时候,会被自动加上了头部和底部的信息。这个文件还会根据你有自定义的打印格式进行格式化。...我的文章A Guide To The State Of Print Stylesheets In 2018已经准确的指出哪些是可以通过使用打印样式在浏览器中直接使用能力。...这个工具是通过 WebKit 渲染引擎来工作的。 从根本上说,这个工具虽然和浏览器打印做着一样的工作,但是你却发现它没有自动生成头部和底部。...就像查找浏览器中的 CSS 支持一样,你需要去查看这些 UA 的文档确认它们支持哪些属性。例如,Prince(我比较熟悉的)在编写的时候支持 Flexbox 但不支持 CSS Grid Layout。

    1.5K60

    Java 多线程(1)---- 初识线程

    试想一下,如果我们在一个进程中添加多个线程,那么当这个进程中某个线程阻塞的时候,其余线程还可以继续执行,做它们自己的工作,这样的话计算机的利用效率就提高了。这当然是一个最简单也是最常用的例子。...请注意:优先级越高的线程只是越容易得到 CPU 资源,也就是说优先级可以理解成线程获取 CPU 资源的概率,优先级越高的线程获取 CPU 资源的概率越大,但不一定说线程优先级越高,线程就一定能得到 CPU...那么此时主线程应该陷入等待状态,让出CPU,直到用户的输入将其唤醒。但是子线程还是可以继续执行。 来看看结果: ?...那么当主线程休眠完 5 秒的时候守护线程也正好休眠完成并且在准备下一次的打印。...因为在这个程序中主线程是唯一的非守护线程,如果主线程结束了,也就意味着程序中不存在非守护线程了。那么此时所有的守护线程都会被强制结束。所以一些重要的任务不应该放在守护线程中完成。 好了。

    41730

    我敢打赌绝大多数程序员没有这么深入研究过 System.out.println()!

    当您通过命令行运行程序时,输出将打印在同一个命令窗口中,我们可以使用 setOut 方法来改变这种行为。 在以下示例中,我将输出重定向到同一目录中的文本文件。...但当我们开发生产质量软件时,我们应该注意到应该使用记录组件(log4j 等),并且应该避免使用 System.out.println。 为什么? 灵活性:log4j 的记录器提供了多种记录级别。...我们可以相应地分隔日志信息。例如,X 消息只能在 PRODUCTION 上打印,Y 消息应打印在 ERROR 等上。 可重构性:log4j 只需一个参数更改即可关闭所有日志记录。...粒度:在应用程序中,每个类都可以有不同的记录器并相应地进行控制。 实用性:在 System.out 中限制重定向消息的选项,但是如果是记录器(like log4j),则可以提供多种选项。...静态导入可能会缩短一点,但不推荐使用,因为它导致可读性差。 我只是使用这种情况来解释静态导入,并避免在下面的情况下使用它。

    72620

    关于日志打印的几点建议以及非最佳实践

    所以这也就导致了一个问题,大学毕业和工作时衔接不上最大的问题不在于技术上的难度,而是日志打印的问题。...WHERE 1.程序入口   在入口打印日志是因为这个时候传递进来的参数没有经过任何处理,将它打印在日志文件中能一眼就知道程序的原始数据是否符合我们的预期,是不是传递进来的原始数据就出现 的问题。  ...例如,程序如果开启了INFO级别日志,DEBUG日志就不会打印,但不打印不代表不产生,这在后面会提到。通常在生产环境中开启INFO日志。          那么应该打印什么级别的日志呢?...以下是我的个人理解: INFO 程序入口,这能让开发人员确认参数是否为自己所为。 计算结果,测试关心的程序的输出结果是否符合预期,那么对于计算过程不应该关心,仅给出计算结果就能判断是否符合预期。...例如,新增某个用户发现已经存在时,此时虽然新增失败,但不能说程序出现错误就打印ERROR日志;在删除某个用户发现用户已经被锁定时,此时也不能说因为程序不能按照删除的逻辑继续运行下去就应该打印ERROR日志

    1.9K70

    【初识Go】| Day10 异常处理

    panic Go不使用try...catch方法来处理异常,而是使用panic和recover Go的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,如数组访问越界、空指针引用等。...不是所有的panic异常都来自运行时,直接调用内置的panic函数也会引发panic异常;panic函数接受任何值作为参数。当某些不应该发生的场景发生时,我们就应该调用panic。...但是我们捕捉异常并不是为了停止程序(一般情况),而是为了让程序能正常运行下去,这时候就到recover出场了。...("1") panic("我是panic") fmt.Println("2") } 输出: 1 我是defer里面第一个打印函数 我是panic 我是defer里面第二个打印函数 可以看到,f函数一开始正常打印...在defer函数(但不是它调用的任何函数)内执行恢复调用,通过恢复正常执行来停止panicking序列,并检索传递给panic调用的错误值。

    25900

    python粗谈面向对象(二)

    面向对象之类成员 类的成员分为两种形式: 公有成员:在任何地方都可以访问。 私有成员:只能在类的内部访问。...【采用单例模式动机、原因】 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或...因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要。 如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。...aaa' # 设置属性 del f1.AAA # 删除属性 # 打印内如下 get的时候运行我啊 set的时候运行我啊 delete的时候运行我啊 第二种方式 class B: def...get的时候运行我啊 set的时候运行我啊 delete的时候运行我啊 下面是一个商品实例的应用: class Goods(object): def __init__(self):

    63330

    计算机小白的成长历程——分支与循环(2)

    我就不卖关子了,在switch语句中,我们在case的执行语句中应该加入一个break——终止、停止,这样我们就能让语句的每一项分支给独立起来,如下图所示: 这里大家就可以看到,我们在输入3后,它只打印了我们需要的礼拜三...,那我们就可以写几种case,下面我买来试一下将1~5的结果都打印成工作日,将6~7的结果都打印成休息日,我们来编写一下代码: #define _CRT_SECURE_NO_WARNINGS 1 #include...a为1~5的情况下打印工作日,在a为6~7的情况下打印休息日,那现在的问题来了,这样编写它能够正常运行吗?...下面我有个问题,既然break在switch语句中能够使用,那我能不能在if语句中使用呢?...,我们使用了上一篇if语句中提到的知识点,省略else的用法,下面我们来测试一下: 从报错中我们可以看到,这里描述的是break的使用范围,break只能在循环或者开关中使用,有朋友可能就会问了,这个循环我能理解

    17630

    自定义报表预览,高度的可定制化,带来的无限可能

    这种可以使用一个VFP应用程序来作为报表预览窗口的能力,与以前的版本相比,提供了大量对报表预览的表现和行为的控制。...:“我要如何才能将打印按钮从打印预览工具栏上去掉呢?”...在过去的版本中,你必须建立一个自定义的资源文件,定制报表预览工具栏来去掉打印按钮,并在你的应用程序中使用这个自定义的资源文件。...当预览表单被关闭的时候,它应该调用Listener的OnPreviewClose以确保环境被清理干净了。 NewPreview 类 (在 NewPreview.VCX中)是一个非常简单的例子。...总结 Microsoft已经为在设计时和运行时开放VFP的报表引擎做了大量令人难以置信的工作。

    69900

    Go语言核心36讲(Go语言进阶技术十)--学习笔记

    毕竟我们编写的所有代码最终都需要通过操作系统才能在计算机上执行。这听起来就很麻烦,不是吗?...这条最里面的语句调用了fmt.Println函数并想要打印出变量i的值。 这个程序很简单,三条语句逐条嵌套。我的具体问题是:这个命令源码文件被执行后会打印出什么内容?...你可以想象一下,如果当for语句执行完毕的时候,这些go函数都还没有执行,那么它们引用的变量i的值将会是什么? 它们都会是10,对吗?那么这道题的答案会是“打印出 10 个10”,是这样吗?...但是为了严谨起见,无论应聘者的回答是“打印出 10 个10”还是“不会有任何内容被打印出来”,又或是“打印出乱序的0到9”,我都会紧接着去追问“为什么?”...我还提到了 Go 语言内部的运行时系统和调度器,以及它们围绕着 goroutine 做的那些统筹调配和维护工作。这些内容中的每句话应该都会对你正确理解 goroutine 起到实质性的作用。

    32201

    Kerberos原理--经典对话

    Athena: 第一个限制:用户只输一次口令,在他们工作站启动的时候,这意味着当你需要申请新的服务的票时,不需输入你的口令。第二个限制:口令不能在网络上进行明文传输。 Euripides: 好的。...我们可以写一个程序,在用户退出的时候把票销毁掉,这些票也主不能再用了。 Euripides: 那么很明显你的统应该有一个票据销毁程序,让用户依赖这样的机制是非常愚蠢的。...我等你登到工作站的时候,打开我的程序并拷贝一份你的票。我等你退出并离开。我把我的工作站的地址调整为你登录时用的地址。我让工作站认为我是你。我有你的票,你的用户名,你的地址。...这给了我足够的时间用你的名义去取你的文件并打印一千份什么东西。 你看,时间戳工作的很好如果小偷选择在它失效以后来用的话。如果小偷能在它失效之前用…。啊,好…当然,你是对的。...我想要打印客户程序确认它送交的服务是合法的服务。这就是程序要做的。我输入打印命令并给出一个文件名。这时我已经有了打印服务票和口令。

    2K30

    Linux服务简介-关闭不需要的Linux服务

    今天安装了一次CentOs Linux,发现Linux启动的时候启动了好多服务,大部分都不知道是干什么的。...对于服务器,应该更深入了解以确定应该开启哪个调度程序。大多数情况下,笔记本/台式机应该关闭 atd 和 anacron。注意:一些任务的执行需要 anacron,比如:清理 /tmp 或 /var。...Linux服务(Linux services):cupsd, cups-config-daemon 打印机相关。如果你有能在 Fedora 中驱动的 CUPS 兼容的打印机,你应该开启它。...但是我不知道它作用于多核 CPU’s 或 超线程 CPU’s 系统的效果。在单 CPU 系统中关闭它应该不会出现问题。...Linux服务(Linux services):sshd SSH 允许其他用户登录到你的系统并执行程序,该用户可以和你同一网络,也可以是远程用户。开启它存在潜在的安全隐患。

    8.6K51

    第一章(建议收藏)

    各位小伙伴大家好,我是泽奀。在前篇的内容中我给大家说过《python的介绍》,如果各位小伙伴对python的介绍还有不是很了解的地方可以去看看。...python的打印语句是:print,要让python用到相对应的指令打印出的文字,注意:要打印要用双引号或者单引号给括起来。下面我就给大家看看打印出hello python的一个效果运行。...因此显示成别的颜色,看你自己的编译器有没有调整过。 这种方法可以让你的语法更加的突出,在刚开始的时候对新手的帮助可以说是很大的了。...随着我们编写的程序代码量越来越多越来越复杂,我们所用的注释也会越来越多,就跟应该在代码中添加注释了,一个优秀的程序员的注释是写的非常好,逻辑性,包括一个整体的代码也是一样的。...隐式声明: 变量可以不经声明直接使用,此时VB给该变量赋予缺省的类型和值。这种方式比较简单方便,在程序代码中可以随时命名并使用变量,但不易检查。 显式声明: 用声明语句创建变量。

    57110

    11-网络芯片CH395Q学习开发-模块使用Socket0作为UDP组播(多播)通信,MAC地址过滤

    1.关于教育工作者,科技工作者,公务人员 不知为什么,在大众的想法里,教育工作者,科技工作者,公务人员就应该喝米粥吃咸菜!...好久之前的袁隆平老爷子摸车事件,还有现在的戴建业老爷子事件. 对于教育工作者,科技工作者,公务人员他们不是应该让他们过得更好一点吗?...教育工作者,科技工作者,公务人员,只要是人家正常的挣钱养家,我才不管人家穿金戴银,只要人家过得开心,我也开心....注意,连接路由器或者交换机的时候是连接其LAN口. ? ?...7.调试助手发送数据给单片机 单片机程序里面写的是把接收的服务器返回给服务器,并使用串口打印接收的消息 ? 串口会打印上位机的IP地址,本身端口号,还有发送的消息 ?

    1.3K10

    这代码写的跟狗屎一样!怎么优化?19招搞定它

    今天主要是分享如何优化我们的Java代码,代码写的好,自然bug就会少很多,但不是所有Bug都是代码导致,可能是其他方面,比如:数据问题、奇葩的需求等。...HashCode,不要简单地返回固定值 在代码 review 的时候,我发现有开发重写 HashCode 和 Equals 方法时,会把 HashCode 的值返回固定的 0,而这样做是不恰当的。...既然性能没什么差别,那么就推荐根据业务的需求进行编码。比如,循环遇到异常时,不允许中断,也就是允许在发生异常的时候能够继续运行下去,那么异常就只能在 for 循环里进行处理。...这样等到下次用到的时候,就可以很快进行执行,也就少了一步对 SQL 的解析动作。 PreparedStatement 还能提高程序的安全性,能够有效防止 SQL 注入。...在集合中元素非常多的情况下,这不仅会占用大量的内存空间,执行效率也非常慢。我曾经就遇到过这种批量打印方式造成系统性能直线下降的实际案例。

    25210

    Linux后台开发调试经验分享

    也许有人听过,也许有同学用过,如果感觉使用不好的兄弟,我可以告诉大家:应该是测试场景 + 场景驱动开发。对,仅仅是里面融入“场景”这个宾语,大家在做开发的时候,就有目的性和针对性。...能不能将表达同一个意思的打印减少? 能不能在关键异常的地方加上统计(输出统计)? 能不能不打? 能不能内存中记录关键信息,在想要的时候,控制其打印时机?...直接告诉测试的兄弟,帮忙执行以下软调,将收集的日志给他分析一下就可以解决问题。 2) 关于 gdb 还有大牛说过:“我就是程序,程序就是我”。我常用 gdb 来检验自己对程序的理解。...常用的 gdb 功能就是打印一些程序的运行信息,修改一些内部运行信息,构造复杂场景。 其实很简单,程序在什么场景下应该有什么样的行为,我自己的必须清楚。...其实,可以 gdb 构造出异常状态,确认告警机制是否生效。gdb 很好的补充这方面的测试和验证工作。 3) 关于统计 统计信息,是关键信息汇集的最好的例子。数据少,切信息明了。

    60730

    golang异常处理详解

    所以异常应该总是掌握在我们的手上,保证每次操作产生的影响达到最小,保证程序即使部分地方出现问题,也不会影响整个程序的运行,及时的处理异常,这样就可以减轻上层处理异常的压力。...这个自定义异常可以在报错的时候存储一些信息,供外部程序使用 type FileError struct { Op string Name string Path string } // 初始化函数...有时候在程序运行缺乏必要的资源的时候应该手动触发宕机(比如配置文件解析出错、依赖某种独有库但该操作系统没有的时候) defer fmt.Println("关闭文件句柄") panic("人工创建的运行时异常...),即使出现问题(一般是遇到不可预料的异常数据)也不应该直接崩溃,应该打印异常日志,关闭资源,跳过异常数据部分,然后继续运行下去,不然线上容易出现大面积血崩。...这就是 go 异常处理,我所能想到和找到的全部内容了,希望你在工作中用的更顺手。

    94620
    领券