编者按:做了许多年IT事情,溘然又对日志级别有些苍茫,哈哈,为什么要有又字。是的,人们都在实践中不断的进修并增进本身。写了良久的字,盯住看3分钟,然后你会想,哦?写错了吧 ^_^
原文在: https://stackify.com/java-logging-best-practices/ 。是官方的内容,至于 ELKB,也是雷同的对象。
日志我们应该做的更好了">日志:我们应该做的更好了
我在说什么?此刻有大量的Java日志框架和库,大大都开拓人员天天都在利用。两个最常用的是 log4j 和 logback。他们利用起来很是简朴,而且表示很不错。根基的 Java 日志文件还不足,这里我们会给出一些Java最佳实践可能发起来辅佐你去利用!
你曾经脱分开拓部分去查察过日志文件吗?假如你做过这些工作,你很快会心识到一些问题。
别的,你有你应用生成的大量数据,却不能有效的事情起来。
是时候严肃看待日志了
一旦你的应用不是运行在你的桌面系统,那么当你的应用不能正确运行的时候,日志(包罗错误信息)就是你的救命稻草。虽然,AMP(机能打点平台)东西会对内存溢出、机能阀值呈现问题的时候发出告诫信息,但这些信息确并不能帮你办理问题,譬喻为什么这个用户不能登录,可能为什么这笔记录没有处理惩罚
在 Stackify,我们构建了一个日志文化“culture of logging” ,来到达如下方针
本文我们将分享这些最佳实践,并分享我们是如何到达以上方针,个中大部门已经在 Stackify’s 日志打点系统中实现了。假如你利用了 前缀式查察系统(Prefix to view your logs,),必然要去看看。
开始记录所有的工作
我在许多商店事情过,哪里的信息是这样的
} catcha(Exception e){ LOGGER.error(e.getMessage(),e); }
我给这个开拓人员点赞,至少利用了 try/catch 来处理惩罚异常。异常内里会包括仓库信息让我或许知道从哪里来的这个异常,但没有记录更多的上下文信息。
有时,他们也做了一些前置的日志
public void processResultes(final List<Double> results){ LOGGER.debug("Processing resultes"); }
可是,凡是这样的语句并不能汇报你应用内里到底产生了什么。假如你认真出产应用的问题办理,那么这样的日志并不能给你什么指示,尤其照旧像大海捞针似的找到这些日志。
就像之前提及的一样。当出产呈现问题的时候,你不能查察物力处事器上的内容,日志是办理问题最常用的几个手段之一。你想要有大量的关联信息及上下文信息。下面我给出指导性原则。
Walk the Code
让我们假设你有个想要处理惩罚的 try/catch 的处所,可是之前并没有汇报你关于请求的更多信息,样例代码是这样的
public class Foo { private int id; private double value; public Foo(int id, double value) { this.id = id; this.value = value; } public int getId() { return id; } public double getValue() { return value; } }
凭据下面工场模式建设 Foo 工具,留意,我留了一个大概发生错误的处所,要领内里挪用 value.doubleValue(),但没有查抄 null。
public class FooFactory { public static Foo createFoo(int id, Double value) { return new Foo(id, value.doubleValue()); } }
这是简朴有用的场景。假设这是我应用的一个要害场景(不答允有任何失败),让我们实验加一些日志信息。
public class FooFactory { private static Logger LOGGER = LoggerFactory.getLogger(FooFactory.class); public static Foo createFoo(int id, Double value) { LOGGER.debug("Creating a Foo"); try { Foo foo = new Foo(id, value.doubleValue()); LOGGER.debug("{}", foo); return foo; } catch (Exception e) { LOGGER.error(e.getMessage(), e); } return null; } }