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

Java 程序如何正确地日志

日志打得好,就能根据日志的轨迹快速定位并解决线上问题,反之,日志输出不好不能定位到问题不说反而会影响系统的性能。...优秀的项目都是能根据日志定位问题的,而不是在线调试,或者半天找不到有用的日志而抓狂… ? 常用日志框架 ?...日志的输出都是分级别的,不同的设置不同的场合打印不同的日志。下面拿最普遍用的 Log4j 日志框架来做个日志级别的说明,这个也比较奇全,其他的日志框架也都大同小异。...知道了日志级别,这还只是基础,如何了解日志的规范,以及如何正确地日志姿势呢?! ? 日志的规范准则 最开始也说过了,日志不能乱打,不然起不到日志本应该起到的作用不说,还会造成系统的负担。...下面是阿里的《Java开发手册》终极版日志规约篇。 ? 规范有很多,这里就不再一一详述了,这里只想告诉大家,在大公司日志都是有严格规范的,不是你随便打就行的。

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

    小白入门学习日志

    来源:Java3y 作者:Java3y 一、Java日志的基础 以前自己自学的时候,排查问题只会写下面的代码: try { // doSomething } catch (Exception...(例如图上的:state:81,我们就认为是发送成功状态) 那么,问题来了,我们在哪日志?...日志最常见的就是用来打印出程序执行时的相关信息,用于快速定位问题和排查问题。我一开始也是这么理解的,但是其实还可以延伸一下。 我现在搞的那个系统,我们还使用日志在系统的执行链路上打点。...于是乎,就需要在一些关键的位置上一个日志(专业点叫做打点) 在整块链路都打通了以后,将这些点位(日志)收集起来,放到实时流式处理平台(storm/flink)上清洗/过滤。...二、手册规范 2.1 使用门面模式的日志框架 【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架 SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一

    37320

    小白入门学习日志

    文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 记得之前写过一篇:《阿里巴巴 Java开发手册》读后感,之前自学时由于没怎么接触过“...一、Java日志的基础 以前自己自学的时候,排查问题只会写下面的代码: try { // doSomething } catch (Exception e) { e.printStackTrace...,问题来了,我们在哪日志?...日志最常见的就是用来打印出程序执行时的相关信息,用于快速定位问题和排查问题。我一开始也是这么理解的,但是其实还可以延伸一下。 我现在搞的那个系统,我们还使用日志在系统的执行链路上打点。...于是乎,就需要在一些关键的位置上一个日志(专业点叫做打点) 在整块链路都打通了以后,将这些点位(日志)收集起来,放到实时流式处理平台(storm/flink)上清洗/过滤。

    53120

    正确的日志姿势

    使用slf4j  使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 ...实现方式统一使用: Logback框架  日志的正确方式  什么时候应该打日志 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑日志,良好的系统,是可以通过日志进行问题定为的。 ...当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支  经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程  基本格式 必须使用参数化信息的方式...: logger.debug(“Processing trade with id:[{}] and symbol : [{}] “, id, symbol);  对于debug日志,必须判断是否为debug...未响应  如果有Throwable信息,需要记录完成的堆栈信息: log.error(“获取用户[{}]的用户信息时出错”,userName,e);  说明 如果进行了抛出异常操作,请不要记录error日志

    75250

    【Python】使用logging日志

    Python中内置一个日志模块——logging,通过它我们就可以很方便的在Python代码中记录简单的程序日志。...默认情况下,logging使用的日志级别是warning,这表示只有在这个级别及其以上级别的日志信息才会被记录,所以默认情况下debug信息和info信息都不会被显示出来。...; %(created)f:日志创建时的时间(由time.time()返回); %(filename)s:文件名; %(funcName)s:调用日志记录的函数; %(levelname)s:日志消息的文本级别...; %(levelno)s:日志消息的数字级别; %(lineno)d:调用日志消息的行号; %(msecs)d:创建时间的毫秒部分; %(message)s:日志消息; %(name)s:日志器的名称...; %(relativeCreated)d:创建日志记录的时间(以毫秒为单位) # 借助于这些格式,我们可以自定义日志记录,比如显示时间: import logging logging.basicConfig

    95220

    使用 Node 开发服务器项目时如何高效地日志

    是 「山月七八月原创计划」 中的「第四篇」文章,简述了在 Node 服务中如何日志 写文章实在太耗时了,把我以前项目的代码片段都给翻了出来,还要处理掉敏感及无关的代码,好在离零点还有一个小时终于弄完了...本篇文章将讲解如何使用 Node 在服务端更好地日志 哪里应该打日志: AccessLog、SQLLog、BusinessLog 应该打什么日志: server_name、timestamp 以及相关类型日志.../traceId userId Node 中如何日志: winston 日志结构化 npm scripts: 优化本地日志及筛选 请求日志: AccessLog 数据库日志: SQLLog Redis...对于重要的数据交互需要日志记录。 除了外界交互外,自身产生的异常信息、关键业务逻辑及定时任务信息,也需要日志。...{ "userId": 10086, // 当用户在未状态时,以 -1 替代 "userId": -1, } Node 中如何日志: winston winston[3] 是 Node

    1.3K20

    稳扎稳JS——“对象”

    一切皆“对象” JS中一切皆“对象” “对象”是属性的集合,而属性又是对象。...getName也为对象,故可以给它添加属性,属性可以是任何类型 getName.value = "lalala"; getName.toString = function(){ //…… } JS...中的“对象”只有属性,属性是一组键值对,键表示属性的名字,值表示属性值,属性值可以是任何JS类型(String、Number、Boolean、Object、Array、Function) JS是“基于对象...”语言,这意味着它并不是面向对象语言,它没有对象,但可以使用JS的特性模拟面向对象。...JS中所有属性都是共有的,但有个约定,若属性两端加上“_”,表示该属性不希望调用者使用,相当于是“私有属性”。

    77560

    这才是定位 bug 日志的方式!

    概述 日常工作中,程序员需要经常处理线上的各种大小故障,如果业务代码没打印日志或者日志打印的不好,会极大的加大了定位问题的难度,使得解决bug的时间变长了。...一个程序员是否优秀,其中一个判断维度就是:处理线上问题是否快狠准,而其中日志是帮我们快速定位问题的绝佳手段。 下面分享一下笔者平时在业务系统里记日志的一些手法和习惯,希望对大家有一些帮助。...请统一日志格式 日志格式最好是统一的,即方便查看定位问题又方便统计收集。我一般喜欢定义一个LogObject对象,里面定义日志的各个字段。...@JsonProperty(index = 1) private String eventName; 将request和response放置在一起 将请求和返回值,放置在同一条日志里,有个好处,就是非常方便查看上下文日志...traceId如何生成呢,一种简单的做法是,使用System.currentTimeMillis() 加上业务接口名字,如: long beginTime = System.currentTimeMillis

    54350

    别再乱打日志了,这样才是定位 bug 日志的方式!

    将request和response放置在一起 日志里加入traceId ---- 概述 日常工作中,程序员需要经常处理线上的各种大小故障,如果业务代码没打印日志或者日志打印的不好,会极大的加大了定位问题的难度...一个程序员是否优秀,其中一个判断维度就是:处理线上问题是否快狠准,而其中日志是帮我们快速定位问题的绝佳手段。 下面分享一下笔者平时在业务系统里记日志的一些手法和习惯,希望对大家有一些帮助。...项目地址:https://github.com/YunaiV/ruoyi-vue-pro 请统一日志格式 日志格式最好是统一的,即方便查看定位问题又方便统计收集。...我一般喜欢定义一个LogObject对象,里面定义日志的各个字段。...traceId如何生成呢,一种简单的做法是,使用System.currentTimeMillis() 加上业务接口名字,如:  long beginTime = System.currentTimeMillis

    30010

    在 Java 代码里正确的日志

    使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。...实现方式统一使用: Logback框架 日志的正确方式 什么时候应该打日志 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑日志,良好的系统,是可以通过日志进行问题定为的。...当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支 经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程 基本格式 必须使用参数化信息的方式...: logger.debug("Processing trade with id:[{}] and symbol : [{}] ", id, symbol); 对于debug日志,必须判断是否为debug...Azure未响应 如果有Throwable信息,需要记录完成的堆栈信息: log.error("获取用户[{}]的用户信息时出错",userName,e); 说明 如果进行了抛出异常操作,请不要记录error日志

    68610

    别再乱打日志了,这样才是定位 bug 日志的方式!

    1 概述 日常工作中,程序员需要经常处理线上的各种大小故障,如果业务代码没打印日志或者日志打印的不好,会极大的加大了定位问题的难度,使得解决bug的时间变长了。...一个程序员是否优秀,其中一个判断维度就是:处理线上问题是否快狠准,而其中日志是帮我们快速定位问题的绝佳手段。 下面分享一下笔者平时在业务系统里记日志的一些手法和习惯,希望对大家有一些帮助。...2 请统一日志格式 日志格式最好是统一的,即方便查看定位问题又方便统计收集。我一般喜欢定义一个LogObject对象,里面定义日志的各个字段。...@JsonProperty(index = 1) private String eventName; 3 将request和response放置在一起 将请求和返回值,放置在同一条日志里,有个好处,就是非常方便查看上下文日志...traceId如何生成呢,一种简单的做法是,使用System.currentTimeMillis() 加上业务接口名字,如: long beginTime = System.currentTimeMillis

    25150
    领券