Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 一个人应该做多少检查(简单的jQuery日志函数)_Logging - Fatal编程技术网

Logging 一个人应该做多少检查(简单的jQuery日志函数)

Logging 一个人应该做多少检查(简单的jQuery日志函数),logging,Logging,我创建了一个简单的jQuery函数,用于开发人员事件和错误记录。。。它调用一个web服务函数,该函数只将几个传递的参数记录到名为EventLog的日志表中 其中一个参数(logEventStr)只是一个限定日志事件的字符串。。。例如“调试”、“错误”、“用户”、“信息”。。。等等。我在另一个表中有所有这些事件类型,称之为EventTypes,索引(即1=调试,2=信息,3=用户…),并通过外键约束链接到日志表中的eventId列 因此,在代码审查期间,有人建议/争辩说,应该对该日志事件字符串进行

我创建了一个简单的jQuery函数,用于开发人员事件和错误记录。。。它调用一个web服务函数,该函数只将几个传递的参数记录到名为EventLog的日志表中

其中一个参数(logEventStr)只是一个限定日志事件的字符串。。。例如“调试”、“错误”、“用户”、“信息”。。。等等。我在另一个表中有所有这些事件类型,称之为EventTypes,索引(即1=调试,2=信息,3=用户…),并通过外键约束链接到日志表中的eventId列

因此,在代码审查期间,有人建议/争辩说,应该对该日志事件字符串进行一些初始检查,因为“开发人员可能会在logEventStr参数中错误键入事件类型”。我解释说,我在web服务中有代码,用于检查有效的事件字符串,并抛出在Ajax调用的失败事件中处理的异常。。。它甚至会将拼写错误的事件名错误打印到控制台,这样开发人员就可以立即知道自己搞错了,并将其更正。进一步的“讨论”指出,EventTypes中的索引应该在javascript中硬编码(可能是JSON对象),并在进行web服务调用之前进行检查。这对我来说似乎很愚蠢,因为现在开发人员必须跟上EventTypes表中的更改,并让它们手动与硬编码的JSON对象同步。最后,我在某种程度上同意使用另一个web服务调用填充JSON对象,该调用返回EventTypes表的内容并缓存它,这样在第一次命中时就可以进行一次性调用。然而,我仍然认为,即使这样也没有必要。。。日志功能只供开发人员使用,而logEventStr永远不会由最终用户指定

我的问题是。。。哪种技术是正确的?对于像日志功能这样简单明了的功能,开发人员专用的功能,需要进行多少检查


这个周末我一直在考虑这个问题,但它仍然困扰着我。当然,也许这两种方法都不正确,所以我们欢迎其他的想法

为什么不为每个日志事件类型创建一个包装器函数

如果原始函数是
log
,并且使用方式如下:

log("user", "is a zombie");
log.user("is a zombie");
这可以改写为:

logUser("is a zombie");
其中
logUser
只需使用参数
user
调用
log

另一种方法是使
log
成为一个具有各种功能的对象,因此您可以这样使用它:

log("user", "is a zombie");
log.user("is a zombie");
等等

使用您的日志机制的开发人员不应该为其内部结构而烦恼,因为我们在这里处理的是一个日志系统,日志类型的数量是有限的,所以如果您预先列出数据库中存在的、不需要修改的、经过深思熟虑的日志类型列表,那就不必担心将来会发生什么事了

编辑(根据评论):

从您的问题中,我看到有两个表,
EventLog
EventTypes
。我假定
EventLog
有两列:

  • 事件
  • 事件
EventTypes
也有两列:

  • 事件
  • 事件描述
这一点让我困惑,我引述:

现在开发人员将不得不保留 更新EventLog表中的更改

据我所知,此表的目的是存储有关各种事件及其类型的信息。此表将更改,因为每次记录事件时都会添加行。这里没有结构性变化

EventTypes
表是一个可以更改的表,也可以添加新的事件类型。这也意味着可以添加一行

这两个表不会以添加或删除列的方式进行修改

EventTypes
或多或少是“固定”的,每个事件类型都与一个数字相关联。这个数字应该是数据库和Javascript之间的“协议”

因此,如果您有这样的三行:

log("user", "is a zombie");
log.user("is a zombie");
  • 1 |调试
  • 2 |信息
  • 3 |用户
那么,您还应该具有如下三个功能:

log("user", "is a zombie");
log.user("is a zombie");
  • log.debug
  • log.info
  • 日志用户
每个人都应该用合适的号码给你的网络服务打电话。这是你的协议

如果添加了新的事件类型,那么现在您的表有一个新行,如下所示:

log("user", "is a zombie");
log.user("is a zombie");
  • 4 |误差
然后,您应该为开发人员添加一个新函数:

  • 日志错误
这样,就不会有“破坏性的变化”,因为新的功能被添加,而旧的功能在过程中不会被破坏。假设您的编号方案不变


您只需告诉您的开发人员“从现在起,您有了一个新功能,其他所有功能都将像以前一样工作”,然后继续您的业务。

Hmm。。。有点喜欢这个想法(log.user)。更妙的是,这些内部事件类型很少发生更改,并且会处理“拼写错误”的可能性。你对本次讨论的哲学方面有何看法?我看到你明白了我这个尴尬问题的症结所在,是的,我的意思是“开发人员必须跟上事件类型”,而不是事件日志。您的附录现在更有意义了,因为添加一个函数相当于添加另一个事件类型,这是应该的。我更喜欢它,因为它解决了我必须在两个方面跟上列表的问题——即客户端和数据库端。