日志:记录程序的运行轨迹,这很方便查找关键信息,并促进了快速定位以解决问题。
通常,Java程序员依靠集成开发工具(例如Eclipse/Idea)的调试调试功能来跟踪开发项目时的错误。但是,如果发布项目进行测试和生产环境,该怎么办?您可以说可以使用远程调试,但是您不能允许您这样做。
因此,日志的作用是开发并在测试和生产环境没有调试调试工具时进行测试人员定位的定位。如果日志很好,您可以根据该轨迹快速找到并解决在线问题。日志。相反,日志输出不好。定位问题不仅可以不合适,还可能影响程序的运行性能和稳定性。
许多介绍AOP使用日志的地方作为简介。实际上,如果剪切日志!对于日志,这是极其不科学的,当方法启动,结束和异常时,这绝对不足以输出一些。该日志对于日志分析没有任何意义。方法的开始和结束的方法是什么,该方法呢?如果方法中没有log,则日志的含义完全丢失!是应用程序的问题,它没有效果。
无论编程语言如何,日志输出几乎无处不在。总结,日志大致是以下用途:
日志在应用程序中非常非常重要。良好的日志信息可以帮助我们快速找到程序何时有错误并找出原因。
作为一个自我文化程序,它应该对日志有足够的注意。
log4j,日志记录,commonging,slf4j,logback,开发的学生对这些与日志相关的技术并不陌生。为什么有这么多的日志技能,它们之间有什么区别和联系?让我们看看下面的分解:
这是Java随附的日志工具类。它已经在Java.util下的JDK 1.5中提供。登录。在正常情况下,基本上没有人使用它,只是理解它。
Commons-Loging是日志的立面界面。它也是Apache提供的最早的日志外面接口。用户可以选择不同的日志来根据其偏好实现框架,而无需更改log的定义。现在,它不是很受欢迎,只需了解它即可。
SLF4J(英文)称为“ Java的简单日志记录外墙”,为Java.Facade立面提供了一个简单的日志外观,底层是接口。它允许用户通过项目中的SLF4J访问其他日志系统,并具有其喜好。
因此,SLF4J入口是许多接口的集合。它对特定的日志实现不承担任何责任。它仅负责在编译过程中找到合适的日志系统以绑定。在SLF4J-API中特异性定义了什么接口。检查SLF4J-API源代码。已经发现,除了公共最终类LoggerFactory类外,它是接口定义。因此SLF4J-API本质上是接口定义。
Log4J是Apache的开源日志框架,它也是具有最大市场份额的框架。
注意:Apache在2015.08.05当天宣布Log4J,用户需要切换到Log4J2。
以下是原始官方文本:
log4j 2 apache log4j 2是Apache开发的升级产品。
log4j2与log4j1发生了很大变化,log4j2与log4j1不兼容。
LogBack是SLF4J的本机实现框架。它也来自log4j的手,但比log4j具有更多的优势,特征和性能。它基本上用于替换log4j成为主流。
LOGBACK的执行速度比Log4J的执行速度更快。基于我们在Log4J上的工作,LogBack重写了内部实现。在某些特定场景中,它甚至可能比以前的速度快10倍。尽管确保记录组件更快,而所需的内存则更少。
太多选择的后果是选择困难。我的观点不是最好的,只有最合适的:
查看在线日志时,我们是否陷入了纳仓?没有应该出现的日志,很多无用的日志或您需要散布在各个角落的信息,尤其是在遇到紧急在线错误时,有效日志被大量毫无意义的日志信息淹没,焦虑和无助地浪费了大量大量的日志。那么记录日志的正确时间是什么?
总结一些需要写的几点:
日志变量通常是没有变化的。最好将其定义为最终静态。变量名称已大写。
通常,课程只有一个对象。如果有父母类,则可以在父类中定义。
日志变量类型定义为立面接口(例如SLF4J的记录器)。实现类可以是log4j,logBack和其他日志实现框架。不要将实现类定义为变量类型。否则,日志切换是不方便的,不符合抽象编程想法。
此外,建议引入龙目木的依赖性。可以使用班级头的注释在程序的任何位置上打印日志信息。无需更改原始代码。
使用参数化表单{}位置,[]执行参数隔离
这种可读性很好,因此您可以知道[]是输出动态参数。{}用于占用一些相似的绑定变量,只有在真正准备打印参数时,才能方便地找到问题。
如果日志框架不支持参数化表单,并且当日志输出不支持日志级别时,它将导致对象由对象和废物内存创建。目前,有必要使用ISXXENABLED来判断,例如:
至少需要打开调试级别,在线日志级别至少应该比信息更重要。
在这里,我们建议您使用SLF4J的外墙接口。您可以以参数化形式的形式输出日志。调试级别不需要由IF判断并简化代码。
日志输出主要在文件中,其中应包括以下内容:
作为日志生成的日期和时间,此数据非常重要,通常适合毫秒。在此时间并使用该格式。不需要添加它,并使用格式建议:。
日志的输出分为不同的级别。打印了不同的设置以打印不同的日志。贝洛(Below)是最常见的Log4J日志框架,以进行日志级别的说明。这是相对完整的,其他日志框架相似。
主要使用以下四个级别:
4.3.2.1信息和调试的选择低于信息,包括对系统运行状态的更详细的了解,例如变量等等,可以输出到debug log.info中。INFO是默认输出级别在线日志和反馈系统的当前状态显示了最终用户。输出信息应该对最终用户是实用的。从功能上的角度来看,信息输出可以视为软件产品的一部分,因此您需要要谨慎对待并且不输出。尝试记录信息日志时,您可能希望模拟您的脑海中的线条。如果此日志经常打印或大部分时间,则应将其视为将其降低到调试级别。
4.3.2.2警告,当错误的选择方法或功能处理过程不符合预期结果时,或者如果有报告错误的框架,则可以考虑。常见的问题处理方法包括:
一般而言,警告级别没有向警报报告,错误级别将发送SMS甚至报警。日志级别的日志意味着系统中存在非常严重的问题。该过程无法下降,依此类推。错误的使用带来了严重的后果,并且没有区分重要的问题水平。只要有问题,就会记录错误。实际上,这是非常不负责任的,因为对于成熟的系统,将有一个完整的错误报告机制。当需要发送错误信息时,许多是根据单元时间期间的错误日志确定的。无论其优先级如何,我们都会对待错误,我们将增加错误的频率。随着时间的流逝,我们的消防员不会太在乎错误的警报,并且此警报将失去其原始含义。
警告代表可以恢复的异常。此失败不会影响下一个业务的实施。在某些情况下,开发人员将沮丧地容忍几个失败。当频率很高时,您需要提醒它们。此时警报内部警报是毫无意义的,但是否则,未记录错误日志。如果存在真正的问题,将不会有真正的时间警报,也是处理的最佳时间。
强调错误警报
错误日志目标
确定问题:
日记模板
在分布式应用程序中,用户的一个请求将致电多个服务完成。这些服务可能仍然是嵌套的,因此完成请求的日志文件不在日志文件的应用程序的日志文件中。标识是在整个系统中连接呼叫日志。
调用链条标准格式:
将链条标签称为选项,仅在没有此数据的情况下输出[]。
日志的线程名称通常在一个应用程序中的同步请求中完成。可以将输出线程名称分类为每个请求生成的日志,以方便区分当前请求上下文。
日志记录器的名称通常在类名中使用。简单的类名称可以在日志文件中输出。查看实际情况是否需要由软件包名称和行号使用。它主要用于查看日志后查找该日志输出,这对于定位问题很方便。
当需要拼接缝合的日志内容,或者需要时间并将存储器浪费作为日志输出,您应该使用log.isxxxxxxxenable()在缝线处理之前进行判断,例如::::::
异常堆栈通常出现在RROR或WARN -LEVEL日志中。异常堆栈包含调用链的系统和异常的根本原因。异常堆栈的日志属于最后一行的日志。收集日志时,需要将其分类为上线。
日志文件放在固定目录中,根据某个模板命名。推荐的日志文件名:
根据不同的环境配置不同的日志输出方法:
滚动日志文件以减少磁盘空间职业后,日志记录工具可以压缩上一个文件。如果使用记录为大型应用程序打开此功能,以进行日志卷。
您了解此代码吗?它应该面对接口对象编程,而不是要实现。这也是软件设计模式的原理。正确的方法应该是。
日志框架也是如此。它也在上面说。该日志具有一个外墙接口,并且有一个特定的实现框架,因此您不应面对编程。
包括和语句。因为这仅将其打印到控制台,未记录在日志文件中,因此管理日志并不方便。在添加中,标准输出不会显示类名称和行号信息。一旦代码中出现了大量的标准输出代码,并且在日志中打印了标准输出的内容,就很难找到日志内容的内容和日志打印。删除无用的日志输出,并且无法移动。这是我个人踏上古董代码的坑。
查看其源代码:
它实际上将输出使用到Tomcat控制台。
为了考虑日志性能,如果代码是核心代码,并且执行频率很高,则建议输出日志以增加判断,尤其是低级别输出
一个是项目本身中的调试日志太多,另一个是在各种框架中也使用了大量调试日志。打开后不久,调试将充满磁盘,这会影响业务系统的正常操作。
如果您的框架使用较低性能的Log4J框架,则不要在数千个循环中打印日志。这可能会拖动您的应用程序。如果您的程序响应较慢的时间,请考虑它是否有太多日志。
最好的方法是记录周期中的点并在周期之外进行总结。
在正常情况下,在程序日志中记录一些更有意义的状态数据:程序启动,退出时间点;程序运行消费时间;时间 - 耗费计划执行进度;重要变量的变化。
作者:Geekerlou