当前位置: 首页 > 面试题库 >

(Windows)异常处理:是事件日志还是数据库?

越文康
2023-03-14
问题内容

我曾在一些商店中工作过,在这些商店中,我已将异常处理实现到事件日志以及数据库的表中。

每个都有优点,根据我的经验,我可以重点介绍以下几个优点:

事件记录日志

  • 例外的行业标准位置(+)
  • 易于记录(+)
  • 可以在此处记录数据库连接问题(+)
  • 可以在事件日志的顶部构建报告和查看应用程序(+)
  • 需要每隔一段时间刷新一次,如果在那里报告很多(-)
  • 不像SQL日志记录那样可扩展[在SQL中添加自定义字段,例如方法名](-)

SQL /数据库

  • 可以处理大量数据(+)
  • 可以处理大量的异常快速插入(+)
  • 单个存储位置在负载平衡的环境中为例外(+)
  • 高度可定制(+)
  • 可以更轻松地从SQL存储构建报表/通知(+)
  • 与典型异常的存储位置不同(-)

我是否缺少任何主要考虑因素?

我敢肯定,这些观点中有一些值得商,,但我很好奇什么对其他团队最有效,以及您为什么对选择抱有强烈的信心。


问题答案:

您需要区分日志记录和跟踪。虽然这句话有些模糊,但我倾向于将日志记录视为“非开发人员的东西”。诸如未处理的异常,损坏的文件等之类的东西绝对不正常,应该是非常少见的问题。

跟踪是开发人员感兴趣的。堆栈跟踪,方法参数,Web服务器返回的HTTP
Status为401.3等。这些确实很嘈杂,并且可以在短时间内生成大量数据。通常,我们有不同级别的跟踪,以减少噪声。

对于登录客户端应用程序,我认为应该使用事件日志(我必须仔细检查,但我认为ASP.NET运行状况监视也可以写入事件日志)。普通用户有权写入事件日志,只要您具有安装程序(无论如何由管理员安装)就可以创建事件源。

您对Sql日志记录的大多数优点虽然正确,但不适用于事件日志记录:

  • 可以处理大量数据: 您真的有大量未处理的异常或其他高级故障吗?
  • 可以处理大量的异常快速插入: 单个未处理的异常会使您的应用程序崩溃-它固有地受速率限制。 对于非开发人员来说,其他有趣的事件也应该进行类似的汇总。
  • 高度 可定制: 事件日志中的消息几乎是自由文本。 如果您需要更多信息,只需指向文本或结构化XML或二进制文件日志
  • 从SQL存储构建报表/通知要容易一些: 报表是使用事件日志查看器内置的,并且通知系统是固有的-由于应用程序崩溃-或与其他真正重要的通知混合-几乎没有借口缺少事件日志消息。 对于公司或其他联网的应用程序,已经从事件日志中删除了1000种不同的应用程序以查找错误…可能是您的系统管理员已经在使用一个。

对于 跟踪 (异常或错误的特定详细信息是其中的一部分),我喜欢平面文件-易于维护,易于grep,并且可以将其导入Sql进行分析(如果我喜欢)。

90%的时间,您不需要它们,并且将它们设置为WARN或ERROR。但是,当您将它们设置为INFO或DEBUG时,您将生成 大量
数据。RDBMS的开销很大,包括性能(ACID,并发等),存储(事务日志,SCSI
RAID-5驱动器等)和管理(备份,服务器维护等)的开销。跟踪日志不需要。



 类似资料:
  • 1.【强制】应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFactory

  • 1.【强制】不要捕获Java类库中定义的继承自RuntimeException的运行时异常类,如:IndexOutOfBoundsException / NullPointerException,这类异常由程序员预检查来规避,保证程序健壮性。 正例:if(obj != null) {...} 反例:try { obj.method() } catch(NullPointerException e)

  • 问题内容: 此处通常建议添加索引,以解决性能问题。 (我只在说阅读和查询,我们都知道索引会使写入变慢)。 多年来,我已经在DB2和MSSQL上尝试了很多方法,结果总是令人失望。 我的发现是,无论索引有多“明显”,它都会使事情变得更好。事实证明,查询优化器更智能,而我的明智选择的索引几乎总是使事情变得更糟。 我应该指出,我的经验主要与小型表(<100‘000行)有关。 谁能提供一些切实可行的索引选择

  • 主要内容:Python语法错误,Python运行时错误开发人员在编写程序时,难免会遇到错误,有的是编写人员疏忽造成的语法错误,有的是程序内部隐含逻辑问题造成的数据错误,还有的是程序运行时与系统的规则冲突造成的系统错误,等等。 总的来说,编写程序时遇到的错误可大致分为 2 类,分别为 语法错误和 运行时错误。 Python语法错误 语法错误,也就是解析代码时出现的错误。当代码不符合 Python 语法规则时,Python解释器在解析时就会报出 Synt

  • 假设我有一个类Person,具有不同数据类型的不同属性,我在我的主方法中有这样的代码: 现在,假设高度的赋值引发了一个异常,例如InvalidCastException,代码将停止执行,并且可能会记录一些东西,以防我有一个记录表。问题是,从日志中,我无法确切地理解哪一行和赋值抛出了异常。 是否有任何方法可以捕获异常,并能够记录(数据库中的某个位置)哪个赋值引发异常,以及在这种情况下针对哪种类型的强