我曾在一些商店中工作过,在这些商店中,我已将异常处理实现到事件日志以及数据库的表中。
每个都有优点,根据我的经验,我可以重点介绍以下几个优点:
事件记录日志
SQL /数据库
我是否缺少任何主要考虑因素?
我敢肯定,这些观点中有一些值得商,,但我很好奇什么对其他团队最有效,以及您为什么对选择抱有强烈的信心。
您需要区分日志记录和跟踪。虽然这句话有些模糊,但我倾向于将日志记录视为“非开发人员的东西”。诸如未处理的异常,损坏的文件等之类的东西绝对不正常,应该是非常少见的问题。
跟踪是开发人员感兴趣的。堆栈跟踪,方法参数,Web服务器返回的HTTP
Status为401.3等。这些确实很嘈杂,并且可以在短时间内生成大量数据。通常,我们有不同级别的跟踪,以减少噪声。
对于登录客户端应用程序,我认为应该使用事件日志(我必须仔细检查,但我认为ASP.NET运行状况监视也可以写入事件日志)。普通用户有权写入事件日志,只要您具有安装程序(无论如何由管理员安装)就可以创建事件源。
您对Sql日志记录的大多数优点虽然正确,但不适用于事件日志记录:
对于 跟踪 (异常或错误的特定详细信息是其中的一部分),我喜欢平面文件-易于维护,易于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,代码将停止执行,并且可能会记录一些东西,以防我有一个记录表。问题是,从日志中,我无法确切地理解哪一行和赋值抛出了异常。 是否有任何方法可以捕获异常,并能够记录(数据库中的某个位置)哪个赋值引发异常,以及在这种情况下针对哪种类型的强