5种改善服务器日志记录的技术

在最近的时间里,我们已经看到了许多工具可以帮助您理解日志。 诸如Scribe和LogStash之类的开源项目,诸如Splunk之类的本地工具以及诸如SumoLogic和PaperTrail之类的托管服务。 这些都可以帮助您将大量日志数据减少为更有意义的内容。

它们共有一个共同点。 它们都取决于您实际放入日志中的数据。 正确地获取数据质量和数量的任务就落在了您身上。 考虑到这一点,在记录日志时,您应该经常注意以下五件事:

1.您好我的(线程)名称是..

Thread name属性是Java最被低估的方法之一,因为它主要是描述性的。 它发挥最大作用的地方是多线程日志记录。 大多数日志记录框架将自动记录当前线程的名称。 但是,它的外观通常类似于“ http-nio-8080-exec-3”-由线程池或容器分配的名称。

线程名称在您的日志中是主要房地产,因此您需要确保正确使用它。 这意味着为它分配详细的上下文,例如Servlet或立即完成的任务,以及一些动态上下文,例如用户或消息ID。

因此,代码的入口应以类似以下内容的开头:

Thread.currentThread().setName(MyTask.class.getName() + “: “+ message.getID());

2.分布式标识符

在SOA或消息驱动的体系结构中,任务或请求的执行可能跨越多台机器。 当处理一个失败时,连接机器之间的点及其状态将是了解发生了什么的关键。

为了使日志分析器能够在计算机上对相关日志消息进行分组,您需要为它们提供唯一的ID,以此作为每个日志消息的一部分。 这意味着,系统中的每个入站操作都应具有唯一的ID,该ID随其一起运行直到完成。

诸如用户ID之类的永久性标识符可能不是很好的工具,因为一个用户可能对他进行了多项操作,这将使隔离更加困难。 UUID(尽管很长)在这里是一个不错的选择,也可以加载到线程名称或专用TLS中。

不要记录+循环。

通常,您会看到一段代码在紧密的循环中运行并执行日志操作。 基本假设是该代码将运行有限的次数。

事情进行得很好时,可能就是这种情况。 但是,当代码意外输入时,循环可能不会中断 。 在这种情况下,您不仅要处理无限循环,还要处理将无限数量的数据写入磁盘或网络的代码。

留给自己的设备,这可能会使服务器或整个群集停机。

如有可能,请勿在紧密循环中记录。 捕获错误时尤其如此。

void readData {while (hasNext()) {try {readData();}catch (Exception e) {// this isn’t recommend - you can catch, but log outside the looplogger.error("error reading " X + " from " Y, e);}}
}

4.空手

韦斯特罗斯(Westeros)将长城作为其最后一道防线(可以帮助他们的肥胖食品)。 您有Thread.uncaughtExcceptionHandlers 。 因此,请确保使用它们。 如果您不安装这样的处理程序,则可能会冒着将上下文抛出异常的风险,而上下文却很少,并且对是否以及在何处最终记录它们的控制也很少。

请注意,即使在未捕获的异常处理程序中,该处理程序也无法访问终止线程中的变量,您仍然可以获得对Thread对象的引用。 如果您坚持第1步,您仍然会获得有意义的线索。 getName ()日志可为您提供更多上下文。

5.接听外部电话

每当您进行离开JVM的API调用时,发生异常的机会都会大大增加。 这包括Web服务,Http,DB,文件,OS或任何其他JNI调用。 对待每个呼叫,就好像它会爆炸一样(最有可能在某一时刻发生)。

在大多数情况下,API调用失败的原因与您提供给他们的意外输入有关。 在日志中为您提供这些值是解决此问题的关键部分。

try {return s3client.generatePresignedUrl(request);
}
catch (Exception e) {String err = String.format("Error generating request: %s bucket: %s key: %s. method: %s", request, bucket, path, method);log.error(err, e); //you can also throw a nested exception here with err instead.
}

使用Takipi进行服务器调试

Takipi旨在通过使您的日志更智能,信息更丰富来使服务器调试更好。 以下3个功能可以在下次调试服务器时使您的生活更轻松:

  1. 服务器调试 。 当Takipi在JVM中检测到异常或错误时,它将收集引起该异常的代码和变量。 最终结果是,对于应用程序中的每个错误,您都可以直接跳入在该计算机上执行的源代码,并查看引起该错误的所有变量值–当前的局部变量,对象,数组和字符串错误。

    塔基皮1号

  2. 日志集成。 Takipi会为每个日志错误自动添加一个微小的调试超链接,因此您可以用来直接跳到引起该错误的实际源代码和变量值。

    takipi2

  3. 分布式调试 。 如果调用失败的代码是从另一台运行Takipi的计算机上进行的,则您将在分布式调用链中看到源代码和变量值。 因此,如果机器A调用B,而机器C调用失败,则您将看到之间的整个链的代码和变量。

    Takipi3

单击此处尝试塔基皮

翻译自: https://www.javacodegeeks.com/2014/03/5-techniques-to-improve-your-server-logging.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java excel处理框架,Java三方—-excel框架之POI的使用一

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。pdf框架之IText的使用,参见我的博客:Java三方—->pdf框架之IText的使用。今天我们开始POI中Excel部分的学习。POI框架的简单…

关于background-*的一些属性

1、盒模型 盒模型从外到内一次为:margin-box、border-box、padding-box、content-box。 2、一些属性设置的相对位置 ⑴background-position的属性值(top/right/bottom/left/center)起始位置是相对于padding-box外边沿开始的,…

Outlook邮件的右键菜单中添加自定义按钮

customUI代码如下&#xff1a; <customUI xmlns"http://schemas.microsoft.com/office/2009/07/customui"><contextMenus><contextMenu idMso"ContextMenuMailItem"> <button id"button1" label"修改件名"…

vue 项目的I18n国际化之路

I18n (internationalization ) ---未完善 产品国际化是产品后期维护及推广中重要的一环&#xff0c;通过国际化操作使得产品能更好适应不同语言和地区的需求 国际化重点&#xff1a;1、 语言语言本地化2、 文化颜色、习俗等3、 书写习惯日期格式、时区、数字格式、书写方向备…

使用IAM保护您的AWS基础架构

在开发新产品并发现合适的产品市场时&#xff0c;每个团队都需要快速行动。 尤其是初创公司&#xff0c;因为公司的整个未来都取决于快速找到为您的产品付款的人。 对于初创企业和其他团队来说&#xff0c; Amazon Web Services是令人难以置信的工具&#xff0c;可以快速构建其…

mysql文件软连接失败,解决打包软链接打包失败问题

一般情况下打包文件时&#xff0c;如果直接打包软连接会导致打包失败&#xff0c;即没有将要打包的内容打包进去&#xff0c;这里提供tar打包参数-h[rootlocalhost ~]# ll /etc/rc.locallrwxrwxrwx. 1 root root 13 Nov 24 00:45 /etc/rc.local -> rc.d/rc.local[rootlocalh…

快速掌握前端 专为Java程序员定制

Javascript 例子 修改页面内容 js 代码位置 <script>// js 代码 </script>引入 js 脚本 <script src"js脚本路径"></script>注意&#xff0c;到了框架之后&#xff0c;引入方式会有不同 1. 变量与数据类型 声明变量 1) let ⭐️ l…

Solidity中如何判断mapping中某个键是否为空呢?

Solidity中如何判断mapping中某个键是否为空呢&#xff1f; 一.比较标准的做法是建立一个专门和value相关的结构体&#xff0c;用一个布尔型变量来看是否这个key所对应的value被赋过值 代码如下&#xff1a; pragma solidity ^0.4.19;contract UserTest {struct User{string na…

mac安装了多版本php 卸载,mac 安装多版本PHP

前言相信大家在mac 安装PHP多版本的时候也遇到了很多坑# brew install php56# brew install php70这样安装的话肯定会报错的&#xff0c;因为brew存在软连接这个时候我们第一步&#xff1a;brew unlink php56 或者 brew unlink php70这个步骤是关闭掉PHP的软连接第二步&#x…

jQuery的on绑定click和直接绑定click区别

状况之外 在之前的公司并没有遇到这个问题&#xff0c;也就没有深究。直到自己换了现在的公司&#xff0c;刚来第二天就开始写别人写到一半的项目&#xff0c;很无奈&#xff0c;不是原生就是jquery&#xff0c;由于项目急&#xff0c;已经来不及切换框架重新布局&#xff0c;只…

Thymeleaf与Spring集成(第1部分)

1.引言 本文重点介绍如何将Thymeleaf与Spring框架集成。 这将使我们的MVC Web应用程序能够利用Thymeleaf HTML5模板引擎&#xff0c;而不会丢失任何Spring功能。 数据层使用Spring Data与mongoDB数据库进行交互。 该示例包含在酒店的单页Web应用程序中&#xff0c;从中我们可以…

oracle 老白,老白学编程 - Netdata学习 - numa

Numa 介绍NUMA,即Non-Uniform Memory Access Architecture&#xff0c;非统一内存访问架构。背景传统的SMP中&#xff0c; 所有处理器共享系统总线&#xff0c;当cpu数目增大时&#xff0c; 系统总现竞争就相应增加&#xff0c;会成为系统的瓶颈&#xff0c;所以SMP系统的CPU数…

如何安装 Angular CLI 并且检查 CLI 的版本

想在系统中安装 Angular CLI &#xff0c;如何进行安装并且如何检查 CLI 的版本&#xff1f; 可以使用命令&#xff1a; npm install -g angular/cli 进行安装。 使用命令 ng version 来查看 Angular 的 CLI 的版本 转载于:https://www.cnblogs.com/huyuchengus/p/10879166.htm…

2018-2019-2 网络对抗技术 20165329 Exp 8 Web基础

2018-2019-2 网络对抗技术 20165329 Exp 8 Web基础 原理与实践说明 实践内容概述基础问题回答实践过程记录 1.Web前端&#xff1a;HTML2.Web前端&#xff1a;javascipt3.Web后端&#xff1a;MySQL基础4.Web后端&#xff1a;编写PHP网页5.最简单的SQL注入&#xff0c;XSS攻击测试…

为JVM分配内存:一个案例研究

这篇文章是关于最近的性能调整练习的。 与往常一样&#xff0c;这些开始于关于症状的模糊表述。 这次&#xff0c;魔鬼采取了“应用程序速度慢&#xff0c;我们无法访问源代码的形式。 我们有什么改善情况的选择”。 对该应用程序进行仔细研究后发现&#xff0c;它由捆绑在一起…

Thymeleaf与Spring集成(第2部分)

1.简介 这是Thymeleaf与Spring教程集成的第二部分。 您可以在此处阅读第一部分&#xff0c;在那里您将学习如何配置该项目。 如本教程第一部分开头所述&#xff0c;Web应用程序将发送两种类型的请求&#xff1a; 插入新访客&#xff1a;将同步请求发送到服务器以添加新访客。…

我们正在破解JDBC,因此您不必

我们喜欢使用JDBC 没人说。 曾经 更严重的是&#xff0c;如果考虑一下&#xff0c;JDBC实际上是一个非常出色的API。 这也可能是Java成为当今流行平台的原因之一 。 在JDK 1.1 之前 &#xff0c; 以及在ODBC之前 &#xff08;这已经很久了&#xff09;&#xff0c;很难想象有任…

python之requests

转载:https://www.cnblogs.com/zhangxinqi/p/9201594.html 阅读目录 1、requests简介2、requests的安装3、requests请求4、请求响应5、requests异常处理6、cookies7、请求会话(Session)8、SSL证书验证9、代理设置10、身份认证11、编码12、其他说明1、requests简介 requests是通…

php如何清理网站缓存,php怎么清除opcache缓存

php清除opcache缓存的方法&#xff1a;1、开发环境中修改php.ini文件&#xff0c;将“opcache.revalidate_freq”的值改为1&#xff1b;2、在线上环境中&#xff0c;可以在PHP文件中执行“opcache_reset();”代码&#xff0c;重启web服务器。本教程操作环境&#xff1a;windows…

ActiveMQ中的温度,存储和内存使用百分比

为了有效使用ActiveMQ&#xff0c;了解ActiveMQ如何管理内存和磁盘资源以处理非持久性消息和持久性消息非常重要。 ActiveMQ具有三个关键参数&#xff0c;需要对其进行检查。 临时使用百分比 这是已用于假脱机非持久消息的已分配磁盘存储的百分比 非持久性消息是无法在代理重…