在阅读了最新的Coding Horror帖子后,我想知道在开源社区中是否有基于Java的ELMAH版本?一个可配置的JSP/Servlet/Portlet WAR,我可以放入大多数服务器,并有一个很好的GUI来查看系统中的日志.有人有推荐的项目吗?
重复
我有一堆现有的客户端/服务器应用程序正在进行中.偶尔,客户端会想要添加某种类型的Web界面来访问部分数据.这些通常是定制的,虽然有些是"通用的"; 但是每个人在自己的VM中都有自己的"实例".
我想要的是一个集中区域来捕获和记录任何这些VM上出现的任何错误.
我正在创建一个新数据库并设置一个WCF服务,以使这些Web应用程序能够在我的集中式数据库和本地EventLog中创建一个日志条目.
这是一个糟糕的设计吗?
更新
Web应用程序位于2003/IIS6和2008/IIS7中,内置于ASP.NET中.许多实例位于一对Web服务器上,但许多实例将部署到各个VM.
我正在尝试为我的桌面程序设计错误和警告日志文件.
当我的程序读取用户的输入文件时,它可能会发现语法错误或某种类型的无效数据.一旦读完所有内容并且程序正在处理数据,就会发现更多问题.
我想将有关这些的消息写入一个简单的文本文件.我可能还想要包含信息文本来指示进度,时间,内存使用等.我想要包括行号,甚至可能包含导致错误的实际输入行.
这将是用户想要浏览的文件,因此显然它必须布局合理且易于使用.
你知道任何风格指南,或者你看到一个让你自己想到的错误日志文件:"现在这是一个设计良好的日志文件!"
跟进:
前三个答案实际上更适用于服务器或事件日志.
我正在为我的桌面程序寻找日志文件的格式,以详细说明它在输入文件中找到的任何问题以及其处理的成功(或失败).
我确定你已经使用了一些桌面应用程序来生成这样的日志文件.你见过有什么好的吗?
任何人都可以确认Elmah实现了防洪行为,并且默认情况下启用了此行为,或者是否可以通过web.config轻松启用?如果是,那么时间阈值是否可配置?
我建议将Elmah数据库模式设置到我们的数据库,但是如果我们的数十万或数百万网络访问者发生错误,我们的DBA对错误日志消耗大量存储空间有合理的担忧.如果没有达到某个时间阈值,我以为我在Elmah中看到了过滤掉重复异常日志的行为,但是我无法验证这种行为,正在Google上搜索有关此功能的文档.
我想让Django登录在我们的开发服务器上工作.我已经阅读了如何在django站点上记录服务器错误,这似乎是关于该主题的确定答案,并已将配置从答案/sf/answers/447708621/复制到我的settings.py(更改输出当然是WatchedFileHandler的文件;并添加我的管理员电子邮件地址settings.ADMINS).
当我在网站上引发错误500时,AdminEmailHandler和WatchedFileHandler都没有做他们应该做的事情.我已settings.DEBUG到False,并证实了Django的可发送电子邮件和写入文件.我也尝试直接从Django shell登录:
$ /usr/local/pythonenv/DJANGO/bin/python manage.py shell
...
>>> import logging
>>> l = logging.getLogger('django')
>>> l.handlers[0]
<logging.handlers.WatchedFileHandler instance at 0xcd3b48>
>>> l.error("This should write to a file")
>>> l = logging.getLogger('django.request')
>>> l.handlers[0]
<django.utils.log.AdminEmailHandler instance at 0xcd37e8>
>>> l.error("This should email the addresses in settings.ADMINS")
Run Code Online (Sandbox Code Playgroud)
在上述情况下,记录器都没有发出窥视.
但是,通用Python日志记录将起作用(至少对于该文件),证明它不是文件权限问题:
$ python # (or /usr/local/pythonenv/DJANGO/bin/python manage.py shell)
...
>>> import logging
>>> logging.basicConfig(filename='/path/to/same/file/as/above', level=logging.DEBUG)
>>> logging.error("This one shows up")
Run Code Online (Sandbox Code Playgroud)
如上所述,Django可以并且很乐意在我的项目的其余部分发送电子邮件,而不是在这种情况下. …
任务:当我的一个视图中发生错误时,我需要显示自定义错误视图.错误类型无关紧要.
我尝试通过registring查看所有异常来覆盖所有异常,如下所示:
<view
context="Exception"
renderer="server_error.pt"
/>
Run Code Online (Sandbox Code Playgroud)
它运作良好.所有例外都显示了我的观点.但问题是那些错误停止了记录.在我的错误视图中,我可以执行类似logger.error(traceback)的操作,但这是一个愚蠢的想法.
如何在不破坏日志记录金字塔系统的情况下为所有错误注册视图.
我的global.asax中有一个错误处理程序,如下所示;
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when an unhandled error occurs
Dim ex = Server.GetLastError.GetBaseException
Dim lastErrorWrapper As HttpException = Server.GetLastError()
Dim lastError As Exception = lastErrorWrapper
If lastErrorWrapper.InnerException IsNot Nothing Then
lastError = lastErrorWrapper.InnerException
End If
My.ErrorHandler.LogError( _
"<BR/><BR/>URL: " & Request.RawUrl & _
"<BR/><BR/>STACK: " & ex.StackTrace & _
"<BR/><BR/>SOURCE: " & ex.Source & _
"<BR/><BR/>MESSAGE: " & ex.Message & _
"<BR/><BR/>TYPENAME: " & ex.GetType.ToString & _
"<BR/><BR/>INNER EXCEPTION: " …Run Code Online (Sandbox Code Playgroud) 我已经在Debian 7 VM上升级到Apache 2.2.22.我刚刚使用apt-get安装它,除了添加我的VirtualHost之外没有进行任何配置更改
<VirtualHost *:8001 *:80>
ServerName devintegration.ie
ServerAlias devintegration.ie
DocumentRoot /sites/integration/development/docs
ScriptAlias /console/ /sites/integration/development/console/
ErrorLog /sites/logs/devintegration.ie-error_log
CustomLog /sites/logs/devintegration.ie-access_log common
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我习惯的行为是在虚拟主机中指定的错误日志中出现任何Perl错误或警告.我现在得到的行为是Perl错误转到/ var/log/apache2目录中的常见Apache日志,而虚拟主机日志只包含"脚本标题的过早结束".
我已经做了一些谷歌搜索,但大多数结果是关于mod_perl.我确实找到了这个页面,最后的评论表明它的工作方式发生了变化,但没有提供关于是否可以更改的信息. Apache Log Forum "通过CGI脚本写入stderr的任何信息都将直接复制到错误日志中."
有没有办法配置apache来引导Perl错误并警告虚拟主机中指定的错误日志?
我之前使用的Apache版本是2.2.15.
如果我记录异常,应该怎么办?例:
Yii::error(new Exception('test'));
Run Code Online (Sandbox Code Playgroud)
目前,使用我的基本应用程序模板没有任何反应。什么都不会记录(进一步的error()调用也不会记录)。它是否正确?配置为:
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
Run Code Online (Sandbox Code Playgroud)
我曾期望异常会被适当地记录。我应该如何记录异常,特别是。如果我想看看痕迹?
更新:
参见问题在GitHub上。使用Yii 2.0.6可以记录异常。
如果捕获异常并引发另一个异常,这可能会很有用。然后,您可以记录原始问题。但是,如果引发基于Yii异常的异常,则可以经常(或始终?)将原始异常附加为$previous。如果未在任何地方捕获到此类异常,则会自动将其与上一个异常一起记录。
我正在通过其API编写另一个软件的加载项.API返回的类只能通过本机软件和API进行访问.所以我正在编写自己独立的POCO/DTO对象,这些对象映射到API类.我正在研究一个将在原生文件中读取的功能,并返回这些POCO对象的集合,我可以偷到其他地方.目前我正在使用JSON.NET将这些类序列化为JSON,如果这很重要的话.
例如,我可能有像这样的DTO
public class MyPersonDTO
{
public string Name {get; set;}
public string Age {get; set;}
public string Address {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
..和这样的方法将本地"人"读入我的DTO对象
public static class MyDocReader
{
public static IList<MyPersonDTO> GetPersons(NativeDocument doc)
{
//Code to read Persons from doc and return MyPersonDTOs
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个测试文件的单元测试设置,但是当我在其他文件上运行导出时,我一直遇到意外问题.有时原生对象会有意想不到的值,或者API中存在缺陷,当没有理由时会抛出异常.
目前,当发生"特殊"事件时,我只记录异常,导出失败.但我已经决定我宁愿导出我能做的事情,并在某处记录错误.
最简单的选择是只记录并吞下异常并返回我能做的事情,然而我的调用代码无法知道何时出现问题.
我正在考虑的一个选项是将错误字典作为单独的输出参数返回.密钥将标识无法读取的属性,该值将包含异常/错误的详细信息.
public static class MyDocReader
{
public static IList<MyPersonDTO> persons GetPersons(NativeDocument doc, out IDictionary<string, string> errors)
{
//Code to read persons from doc
}
}
Run Code Online (Sandbox Code Playgroud)
或者,我也在考虑将错误存储在返回对象本身中.这会使我的对象的大小膨胀,但还有一个额外的好处就是直接将错误存储在我的对象中.因此,如果某人的导出产生错误,我不必担心在他们的计算机上追踪正确的日志文件.
public class MyPersonDTO
{
public string …Run Code Online (Sandbox Code Playgroud)