范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

这份日志格式规范超棒的,拿走不谢(Java版)

  1 简介
  在程序中写日志是一件非常重要,但是很容易被开发人员忽视的地方。写好程序的日志可以帮助我们大大减轻后期维护压力。在实际的工作中,开发人员往往迫于巨大时间压力,而写日志又是一个非常繁琐的事情,往往没有引起足够的重视。
  开发人员应在一开始就养成良好的日志撰写习惯,并且应在实际的开发工作中为写日志预留足够的时间。 1.1 日志的作用
  一般程序日志出自下面几个方面的需求: 记录用户操作的审计日志,甚至有的时候就是监管部门的要求。 快速定位问题的根源 追踪程序执行的过程。 追踪数据的变化 数据统计和性能分析 采集运行环境数据
  一般在程序上线之后,一旦发生异常,第一件事就是要弄清楚当时发生了什么。用户当时做了什么操作,环境有无影响,数据有什么变化,是不是反复发生等,然后再进一步的确定大致是哪个方面的问题。确定是程序的问题之后再交由开发人员去重现、研究、提出解决方案。这时,日志就给我们提供了第一手的资料。 1.2 撰写日志的要求
  既然撰写日志是有需求,而且也能在未来帮助我们提高工作效率的事情,长远来看是非常有利的一件事情。因此我们应该在自己开发的程序中符合规范的撰写日志,在写日志时要注意以下的问题。 1.2.1 日志的可读性
  日志时给人读的,不仅仅是让自己明白,也要让没有接触过我们源代码的其他程序员也能够一目了然。有的同事在日志中打印特殊的标识符号,例如" ++++++++++ ", "=========== ","————— ",这些符号令人眼花缭乱。这是一种不好的编程习惯。
  另外,把日志分类输出到不同的文件也有利于我们排除干扰,迅速找到我们需要的信息。而且,最好在打印日志时输出英文,防止中文不支持而打印出乱码的情况。 1.2.2 日志的性能
  无论我们把日志写到文件还是数据库,都需要消耗IO资源。适当的控制日志的输出也有利于提高程序的性能。
  例如:尽量避免在在大的循环中打印意义不大的日志内容。输出日志之前最好能判断日志的级别(例如. debug前先调用 isDebugEnabled() 作出判断)。1.2.3 占用磁盘空间
  通常,我们都是把日志写入磁盘上的日志文件中。适当的使用滚动日志并且定时清除旧文件是有好处的。我见过这样一个例子,程序运行几次后就跑不起来了,前几次都是正常的。
  怎么都想不明白程序有什么问题,最后才发现居然是日志文件占满了磁盘空间。在实际的应用中出现上G的日志文件也往往不少见,要在这样规模的日志文件中找出对解决问题有用的信息也是一大挑战。 1.2.4 日志的时效性
  有的时候我们并不能及时的发现问题。需要追溯之前的日志。所以我们是需要保留一段时间以内的日志便于追溯。 1.2.5 日志级别
  通常我们在产品环境中日志的级别都在INFO以上,所以我们必须保证在这样的情况下程序仍然能够输出足够我们作出判断的信息。
  例如常见的系统具有如下的日志级别: // 定义FATAL级别输出宏 #define DRV_LOG_FATAL(fmt, ...)           hlog_format(HLOG_LEVEL_FATAL, "PluginDriver",   "[%s(%d)] "fmt, __FUNCTION__,   __LINE__, ##__VA_ARGS__)  // 定义ERROR级别输出宏 #define DRV_LOG_ERROR(fmt, ...)           hlog_format(HLOG_LEVEL_ERROR, "PluginDriver",   "[%s(%d)] "fmt, __FUNCTION__,   __LINE__, ##__VA_ARGS__)  // 定义WARN级别输出宏 #define DRV_LOG_WARN(fmt, ...)          hlog_format(HLOG_LEVEL_WARN, "PluginDriver",   "[%s(%d)] "fmt, __FUNCTION__,   __LINE__, ##__VA_ARGS__)    // 定义INFO级别输出宏 #define DRV_LOG_INFO(fmt, ...)          hlog_format(HLOG_LEVEL_INFO, "PluginDriver",   "[%s(%d)] "fmt, __FUNCTION__,   __LINE__, ##__VA_ARGS__)    // 定义DEBUG级别输出宏 #define DRV_LOG_DEBUG(fmt, ...)           hlog_format(HLOG_LEVEL_DEBUG, "PluginDriver",   "[%s(%d)] "fmt, __FUNCTION__,   __LINE__, ##__VA_ARGS__)    // 定义TRACE级别输出宏 #define DRV_LOG_TRACE(fmt,   ...)         hlog_format(HLOG_LEVEL_TRACE, "PluginDriver",   "[%s(%d)] "fmt, __FUNCTION__,   __LINE__, ##__VA_ARGS__)
  上述的日志文件中定义了6种日志级别,不同级别的含义在下文详述,需要了解到在一个程序开发的过程中需要维护不同的分别为 FATAL, ERROR, EARN, INFO, DEBUG, TRACE 。1.2.6 日志内容
  我们在写日志的时候,需要注意输出适当的内容。首先,尽量使用业务相关的描述。我们的程序是实现某种业务的,那么就最好能描述清楚这个时候走到了业务过程的哪一步。
  其次,避免在日志中输出一些敏感信息,例如用户名和密码。以及,要保持编码的一致。如果不能保证就尽量使用英文而不是中文。这样当我们拿到日志之后就不会因为看到一堆乱码而不知所云了。 1.2.7 日志格式
  常见的日志格式中对于每一条日志应含有的信息包括日期、时间、日志级别、代码位置、日志内容、错误码等信息。
  下面是一个工作中的日志文件的一部分内容: 2018-05-22 15:35:53.850 TRACE TDWZLog [0x00001b10] <36> ,TDWZProtocol::Init 2018-05-22 15:35:53.850 TRACE TDWZLog [0x00001b10] <89> ,End in processing TDWZProtocol::Init 2018-05-22 15:35:53.853 TRACE TDWZLog [0x00001b10] <142>    ,Connect Execute finish 2018-05-22 15:35:53.853 TRACE TDWZLog [0x00002f10] <149>    ,Enter GetAlarmEventPro func 2018-05-22 15:39:36.382 WARN TrackLog [0x000029fc] - [ internal WARN htrace_server_convert_msgstring_to_contextintls(493) ] detect input id error, trace_id span_id,this chain may not be tracked. 2018-05-22 15:39:36.383 WARN TrackLog [0x000029fc] - [ internal WARN htrace_server_receive(195) ] can not detect trace_id in context, this chain may not be tracked. 2018-05-22 15:39:36.383 TRACE TDWZLog [0x000029fc] <231>    ,TDWZProtocol::DisConnect 2018-05-22 15:39:37.502 TRACE TDWZLog [0x00002f10] <225>    ,End Get AlarmEventPro Func 2018-05-22 15:39:37.503 TRACE TDWZLog [0x000029fc] <241>    ,close socket 2018-05-22 15:39:37.503 TRACE TDWZLog [0x000029fc] <242>    ,Execute DisConnect function succeed.
  可以从该文件中看出一般日志文件中应该含有的信息。 2 日志级别和含义
  Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输出目的地是控制台、文件、GUI组件甚至是套接口服务器;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
  最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。 2.1 Log4j的组成
  Log4j由三个重要的组成构成:日志记录器(Loggers),输出端(Appenders)和日志格式化器(Layout)。 2.1.1 Logger
  控制要启用或禁用哪些日志记录语句,并对日志信息进行级别限制 2.1.2 Appenders
  指定了日志将打印到控制台还是文件中. 2.1.3 Layout
  控制日志信息的显示格式。 2.2 日志级别
  Log4j中将要输出的Log信息定义了6种级别,依次为 TRACE、DEBUG、INFO、WARN、ERROR和FATAL ,当输出时,只有级别高过配置中规定的 级别的信息才能真正的输出,这样就很方便的来配置不同情况下要输出的内容,而不需要更改代码,非常方便快捷。2.2.1 TRACE
  TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12 ,很低的日志级别,一般不会使用。TRACE一般跟踪的是函数的调用,并且TRACE不应该含有变量参数,而仅能提示函数的调用关系。2.2.2 DEBUG
  一般用于细粒度级别上,对调试应用程序非常有帮助,主要用于开发过程中打印一些运行信息。 2.2.3 INFO
  INFO消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。 2.2.4 WARN
  WARN表示会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员一些提示。该级别表示程序会自动调整到正常的状态,类似参数未传入,使用了默认的参数,仍符合程序员预期之内的情况。 2.2.5 ERROR
  ERROR指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。一般在WARN之后的级别在打印错误时,应该同时打印错误码。 2.2.6 FATAL
  FATAL指出每个严重的错误事件将会导致应用程序的退出,这个级别比较高,重大错误,程序无法恢复,必须通过重启程序来解决。 2.3 日志级别大小关系
  日志级别就像开关一样,来决定哪些日志方法被调用,哪些不被调用。在log4j中,日志级别的关系如下所示: ALLother error", DRV_ERROR, iGetResult); DRV_LOG_WARN("[0x%08x] - [DWSdk.errorcode=0x%08x>other error", DRV_ERROR, iGetResult); DRV_LOG_WARN("[0x%08x] - SetEventCallBack should be called first", DRV_ERROR); 3.5 ERROR日志记录示例DRV_LOG_ERROR("Init DwSDK filded;", initRet);  DRV_LOG_ERROR("Connect device failed"); DRV_LOG_ERROR("Create thread failed"); DRV_LOG_ERROR("dw_start_receive failed"); DRV_LOG_ERROR("Communicate failed, socket recv error"); DRV_LOG_ERROR("other error", iGetResult); DRV_LOG_ERROR("SetEventCallBack should be called first");  DRV_LOG_ERROR("[0x%08x] - [DWSdk.errorcode=0x%08x]Init DwSDK filded", DRV_INIT_FAILED, initRet); DRV_LOG_ERROR("- [HPR.errorcode=0x%08x]Create thread failed", HPR_GetLastError());
  上述代码中 [0x%08x] 有下述作用:
  该语句出现于格式化输出时的格式字符串中。形式为 "0x%08x"
  其中, 0x 为普通字符,输出的时候会原样输出为0x 。
  %08x 为整型以16进制方式输出的格式字符串,会把后续对应参数的整型数字,以16进制输出。08的含义为,输出的16进制值占8位,不足部分左侧补0。
  于是,如果执行 printf("0x%08x", 0x1234);
  会输出 0x00001234 。
  最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
  获取方式:点击转发,关注头条号并私信511领取,更多内容陆续奉上。

要买车的注意了电动车销售有猫腻,这点不同可别买新国标出台之后,在旧电动车出问题之后,人们也不会再去修理了,索性直接置换新国标电动车了,毕竟过渡期即将过去,到时候超标的旧电动车就不能上路了。没想到的是,新买的电动车也无法上牌。粉一款好用的电视教育应用APP,孩子假期轻松告别补习班期末考试的结束,迎来了学生们最喜欢的暑假,可随着现在家长们对每一学科的重视,课外兴趣的培养,家长们早早就给自家孩子安排了满满的学习行程,每天在这个夏季中风里来雨里去的,孩子受苦,家有驾照也不敢开车上路?试试这4款车,其他车主看到就绕路走随着假期结束,很多人获得了驾照,但是有驾照和敢开车上路是两回事,有很多新手就算买了车,也不敢开车上路,毕竟在路上的情况时刻在变化,新手可能难以适应。其实,新手之所以担心开车上路出现自动挡开车小技巧遇长下坡,D挡踩刹车不可取汽车改变了我们的生活,是的,在汽车出现之前,我们的出行受距离和天气限制,就算是在同一个城市的人,都可能很久见不上一面,有了汽车之后就不同了,汽车让生活发生了翻天覆地的变化。随着科学准备买新车的注意了这几个配置没啥用,省钱的是自己同样的价格,人们会选择物有所值的商品,同样的商品,人们会选择价格比较低的,这就是人们所说的性价比,在生活的方方面面都能体现这一点。那么在买车时,人们更会精打细算,尽管如今的汽车价格翻车现场,一千多的iPhoneXSMax能不能买?一网友在网上买了台一千多的二手iPhone,问我有没有问题。我的第一反应是,此机必有妖。但是看他提供的截图,第一时间也没看出有什么问题。这是他提供的卖家描述,划重点了换过屏iPho翻车现场,某鱼全新未开封iPhone13到货拆箱近日闲来无事,在某鱼看到一台全新未开封的iPhone13pro,比官网价格还要低几百块。想着官网订货还要个把月才能到货,果断下订单了。有人说最近华强北的魔改机开始大量流通了,最好要iPhone13被卖爆,友商年轻人不讲武德距离iPhone13发布已经一个多月了,但是iPhone13的热度依然不减,第一批官网预定的机器才陆续到货。接下来的双十一,不出意外各大电商平台又要进行一大波预热了。苹果有什么魔力拒绝加价,网友低于官网价入手iPhone13每年九月份苹果新机上线的时候,都会引发一波加价潮。不加价你就得等,正常官网预定要等一个月左右。不想等又不想加价怎么办?某网友就是这么想的,不想加价也不想等,今天心血来潮,明天就想看让女人超感动的100句温柔浪漫语中一38。虽然不能满足妳最大的物质生活但我可以把我的心来满足妳。。39。我爱你用我旧愁里的热情和孩童时代的忠?。。40。妳的话已经锁在我的记忆里了那钥匙妳就替我保管一辈子吧41。没有一揭秘华强北的妖机的骗局,让世界多一份清净注意了!注意了!最近有购买过二手机的都要注意了!这台iphoneX,肯定有问题,而且最近很多用户也碰到了这种问题,目前来说这种机器在市场上已经属于泛滥状态1显示大陆国行零售,型号M
早报荣耀手机也能升级鸿蒙了!微信Mac版迎来更新CNMO早报6月2日晚,HarmonyOS2正式发布,华为宣布将有超过百款手机平板和智慧屏设备升级到HarmonyOS2。而根据荣耀俱乐部官方消息,荣耀品牌设备也能升级Harmon华为鸿蒙系统怎么更新,持有相关机型的都可以按照操作更新昨天晚上8点发布的华为鸿蒙系统,有网友发弹幕感觉自身好像穿越到了未来,我也有一种原来科技这么美妙神奇的感觉,相信大家都已经迫不及待想要更新了吧。从东哥发布文章中我下载了几乎涵盖所有华为升级鸿蒙正确操作值得激动的时刻终于到来,昨晚华为发布鸿蒙系统,宝宝们都太热情了,参加人数爆棚,一直在转圈圈。早起来按步骤一步步很快就成功了。以下是操作和要求首批当前处于公测阶段的机型MateX2M华为HarmonyOS2操作系统发布极狐S全球首搭6月2晚,华为正式发布了HarmonyOS2操作系统,该系统可实现多设备之间融合为一个终端,形成万物互联。根据官方介绍,由于HarmonyOS2属于万物互联系统,因此可以与其他厂商热搜第一!3年前全网羡慕的支付宝锦鲤信小呆,积蓄掏空还找不到工作?2018年,信小呆喜中支付宝一亿大奖,成为了全网羡慕的地表最强锦鲤。当她得知自己中奖之后兴奋地发文,问自己下半生是不是就不用工作了,网友们也都是各种羡慕嫉妒恨。但三年过去了,信小呆支付宝锦鲤信小呆自爆现在没钱没工作,还患上抑郁症信小呆,2018年支付宝亿元大奖锦鲤获得者,最近网上直播时自爆现状中奖3年,花光了20万,现状没钱没工作,还患上了抑郁症6月1日,支付宝锦鲤信小呆发布了一个视频,讲述了她中奖后的生社会组织对腾讯提起诉讼,认为王者荣耀侵犯未成年人权益,网友支持关闭近些年来随着社会的发展,现在互联网已经走进了大众的视野当中,游戏也快速地普及到了全国人民的手机当中,很多热爱游戏的青少年总是喜欢的,将游戏充当成自己解压的一种方式来放松自己,但是我福利满满!快手蓝海计划城市合伙公会名单出炉来源新甘肃新甘肃客户端6月2日讯(新甘肃每日甘肃网记者邹明敏)为进一步扶持招募能力强,具备精细化运营能力的优质公会,快手娱乐直播在5月重磅推出蓝海计划快手城市合伙公会招募活动。近日从鸿蒙系统概念到半导体细分龙头安谱隆,天喻信息是幸运之子吗一支持华为,我们中国人没有退路华为在6月2日晚间,正式发了鸿蒙操作系统2。0(HarmonyOS),该系统可以搭载在任何loT设备上,将所有设备统一语言,打通生态系统实现万物互联。鸿蒙系统个人认为其他品牌可以刷机我自己的手机因为是华为系列,所以今天中午成功的把操作系统改成了国产系统鸿蒙,同时今天也在网上比较关注其他品牌的手机机主有意愿换成鸿蒙系统的,凭我个人的知识我认为可以,因为鸿蒙是开源华为,站起来了谷歌建了个商场,叫安卓,里面主营手机品牌,后来又发展了一些家居品牌,隔壁还有个叫苹果的高端商场,规模虽然小,但都是自营高端品牌,利润率极高。安卓商场经营了很多年,商场的发展已经到了