背景: 我继承了一个网络应用程序,是旨在创建上飞之间的连接的本地和远程的设备。有一个巨大数字移动部件:该应用程序本身具有明显的变化;开发工具是仅有更新;和两个当地和远程的设备已经被"修改",以支持这些变化。

光明的一面是,它有一个合理的记录系统,该系统将编写调试的消息,一个文件,它将记录,这两个文件和一个用户实时视。我有机会重新工作的整个日志/debug机制。

实例:

  • 所有消息都有时间戳和前缀为一个严重的水平。
  • 日志是为客户。他们记录该系统的反应他/她的请求。
  • 任何日志标识的问题,也表明一个解决方案。
  • 调试是为开发商和技术支持。它们揭示了系统内部。
  • 调试指示功能和/或行产生的。
  • 客户可以调整的调试级在飞行设置的详细程度。

问题: 什么样的最佳做法你有没有用作开发的,或视为一个消费者,生成有用的记录和调试?


编辑: 许多有益的建议迄今为止,谢谢!为了澄清:我更感兴趣 什么样的 来记录:内容、格式, 等等.--和这样做的原因-比的具体工具。

什么是它的最好的日志你看了他们最有帮助吗?

谢谢你的帮助!

有帮助吗?

解决方案

这绝对是最有价值的事情做任何记录的框架是一个"1击"工具,收集所有记录和邮件给我甚至当的应用程序是部署在一个机属于一个客户。

并做出正确的选择在什么日志,这样可以大致遵循的主要路径,在你的申请。

作为框架,我已经使用的标准(log4net,log4java,log4c++)

不实现自己的记录框架,当时那里已经是一个很好的。大多数人做的只是重新发明车轮。

其他提示

有些人永远不会使用一个调试器,但日志的一切。这是不同的哲学,你要使你自己的选择。你可以找到的许多建议 喜欢这些, 或 这一个.注意,这些建议不是语言有关的...

编码恐怖的家伙 得到了 一个有趣的后 关于 登录问题 为什么滥用的记录可能是一个时间浪费在某些条件。

我只是认为日志记录进行跟踪的事情,可能仍在生产。调试用于发展。也许这是一个太过简单的方式看见事物,导致有些人使用记录为调试,因为他们不能忍受调试器。但是,调试器的模式可以是浪费时间太:你没有使用这样一种测试的情况,因为 这不是写下来 和后就会消失调试届会议。

所以我觉得我的意见是:

  • 记录必要的和有用的痕迹,通过开发和生产环境、发展和生产水平,与使用一种日志框架(log4 家庭工具)
  • 调试模式为特别奇怪的情况下,当事情失控
  • 试验情况下是重要的,可以节省时间花费在地狱般的错综复杂的调试的会议,作为一种防的回归方法。请注意,大多数人民不使用的测试案例。

编码所述的恐怖 抵抗的趋势的记录一切.这是正确的,但我已经看到了一个hudge应用程序,没有准确的相反,在一个漂亮的方式(并通过一个数据库)...

不要混淆记录、跟踪和错误报告,一些人我知道这样做的,它创造了一个地狱的一个日志文件,以查询通过以得到的信息我想要的。

如果我想要一切都搅动了,我单独的成如下:

  • 跟踪 ->垃圾场的每一个行动和步骤,时间戳,有的输入和 输出数据的这一阶段(最丑陋的, 最大的文件)
  • 日志记录 ->日志的业务流程步骤只、客户并询问这么日志 该调查的标准和输出数据 没有更多。
  • 错误报告/调试 ->的例外情况记录详细说明它在哪里 发生,时间戳,输入/输出 数据如果有可能,用户信息等等

这样,如果发生任何错误和误差/调试记录没有包含足够的信息,我喜欢,我可以永远做一个 grep -A 50 -B 50 'timestamp' tracing_file 以获得更详细的说明。

编辑: 正如也已经说过,坚持标准软件包等内置记录模块,用于python作为一个例子总是好的。滚你自己不是个好主意,除非语言没有在它的标准图书馆。我喜欢包装日志记录在一个小的功能通常采取的信息和价值,用于确定哪些记录它去,即。1-跟踪,2-日志记录,4-调试以发送了价值7下降到3等。

我将只是设置你的记录系统有多个记录水平,在该服务我写的,我有一个记/审计,几乎每一个行动,这是分配一个审计1-5级的更高的数量的更多的审计活动。

  1. 非常基本记录:开始、停止和重新启动
  2. 基本记录:处理x的文件数量等等
  3. 标准的记录:开始到处理,完成了处理,等等
  4. 先进的记录:开始和结束的每一个阶段中处理
  5. 一切:每一个采取的行动

你设置的审计中的水平,配置文件使它可以改变的。

一些一般规则的拇指,我们发现可用于服务器的端应用程序:

  • 请求id -指定一个请求标识到每个进入(HTTP)的请求,然后登录,在每一个日志符,因此可以很容易地查询这些记录后来通过那个ID和找到所有相关行。如果你认为这是非常繁琐,增加,以每日志的发言,然后至少java日志框架作出了它的透明与使用 映射诊断方面 (MDC)。
  • objectID -如果应用程序/服务的交易操纵一些业务对象主要关键,那么它是用来附上也是主要的关键诊断背景。后来,如果有人有问题"时,是这个目的操纵?"你可以很容易地查询通过的objectID,看看所有的日志记录相关,对象。在这方面,它是(有时)有用的实际使用 嵌套的诊断方面 而不是MDC。
  • 当登录? -至少你应该记录只要你交叉的一项重要的服务/分边界。这样,你可以在以后重建的呼流和深入的特定代码,似乎导致的错误。

因为我是一个Java开发,我也会给我的经验与Java Api和框架。

API

我建议你使用 简单的记录正面Java (SLF4J)-在我的经验,这是最好的面记录:

  • 功能齐全的:它有没有跟上的 最共同的分母 方法(如公共记录);相反,它是使用 适度地降低 办法。
  • 具有适配器几乎所有的受欢迎的Java记录的框架(例如log4j)
  • 具有解决方案提供有关如何向所有遗留记录Api(log4j公共记录),以SLF4J

执行情况 最好的实现要使用与SLF4J是 logback -由相同的人也创建SLF4J API。

使用现有的记录格式,例如,使用阿帕奇,然后你可以捎上的许多工具可用于分析的格式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top