是否可以指定MySQLi向PHP默认的'error_log'指令发送任何错误和警告?我似乎无法找到类规范的任何错误选项,我不希望手动处理错误,如下所示:
if ($result = $mysqli->query("...")) { }
else
handle $mysqli->error;
Run Code Online (Sandbox Code Playgroud) 例如:
php.ini文件
... ; Log errors to specified file. error_log = c:/php/php.log ...
错误日志文件(c:/php/php.log)包含此格式的每个条目:
[12-Jun-2011 12:58:55] PHP Notice: Undefined variable: test in C:\www\phpinfo.php on line 2\r\r\n [12-Jun-2011 12:59:01] PHP Notice: Undefined variable: test in C:\www\phpinfo.php on line 2\r\r\n [12-Jun-2011 13:01:12] PHP Notice: Undefined variable: test in C:\www\phpinfo.php on line 2\r\r\n [12-Jun-2011 13:02:11] PHP Notice: Undefined variable: test in C:\www\phpinfo.php on line 2\r\r\n [12-Jun-2011 13:11:23] PHP Notice: Undefined variable: test in C:\www\phpinfo.php on line 2\r\r\n [12-Jun-2011 …
我安装了一个WSGI脚本/app.如果我要求/app/resource,我得到正确答复.但我也在错误日志中输入了一个条目,就像我要求的那样/resource.什么可能导致这个?
我在AWS EC2上使用Apache 2.4 + mod_wsgi部署了Flask应用程序:
/my/app/pathapp.wsgi文件存在/var/www/wsgi并指向/my/app/pathwww.website.comvhost 的Apache配置指向WSGI脚本:WSGIScriptAlias /app /var/www/wsgi/app.wsgi当我获取时www.website.com/app/some_resource/...,我通过代码收到该资源的预期响应200.
但是,当我检查Apache错误日志时,我会发现拒绝请求的大量条目,例如:
[authz_core:error] [pid XXXXX] [client XXXXX] XXXXX: client denied by server configuration: /var/www/html/some_resource
记录的错误与所述请求一一对应,如上所述,请求返回200.
现在,/var/www/html是默认的DocumentRoot,但请求被发送到该/app位置,并由WSGI应用程序通过alias指令正确传递和处理.
所以:为什么我可以在我的错误日志中找到这些条目,其中/app路径被删除,并且在根上直接附加(并正确拒绝)的资源路径?
在评论中回应格雷厄姆的建议:
一位同事告诉我他在AWS EC2实例上遇到了同样的问题.
如何将ExpressJS应用程序中的任何错误记录到文件中?
我知道我可以使用monolog轻松记录Slim框架:
$app->get('/tickets', function (Request $request, Response $response) {
$this->logger->addInfo("Something interesting happened");
$mapper = new Simon\TicketMapper($this->db);
$tickets = $mapper->getTickets();
$response->getBody()->write(var_export($tickets, true));
return $response;
});
Run Code Online (Sandbox Code Playgroud)
在Express中,我通常将错误记录到控制台进行开发:
Model.findOne(options, function(err, doc) {
var output = {};
if (err) {
console.log("Error retrieving doc: " + err);
}
Run Code Online (Sandbox Code Playgroud)
但是在我的生产服务器中,当应用程序出错时,我确实需要一个有用的日志文件.
有任何想法吗?
在Express中app.js,它具有:
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: …Run Code Online (Sandbox Code Playgroud) 我的公司有一个大型托管,但它不由我们管理,我们没有看到配置文件,但我想在我们的本地测试服务器上回复此功能.
我是我公司的新手,想要开始一些应用程序的调试,以修复一些未成年人和专业问题给客户端,但文件的数量是如此之大,以至于单个error_file是巨大的..并且有很多人正在研究这个,所以每次检查日志(比如30秒到1分钟)有数百条线.
我不知道这是通过.htaccess文件还是在php.ini上设置的.
- 编辑 -
我在谈论PHP错误,但我怎么说我不知道这是在php或apache上设置还是使用第三方库.
我不是在谈论设置一个特定的文件夹error_log,我说的是脚本文件夹中记录的错误.
示例:我创建了一个名为test1的文件夹,在里面我制作了一些错误的php脚本,它会抛出一些错误,当我运行脚本时,我可以看到在该文件夹上创建的error_log文件.所以它可以即时运行.
我试图询问托管公司支持他们是如何做到这一点的,但他们没有回答我.
我不知道是否可能是某种Cpanel设置(BTW主机支持的东西不能理解这个问题但是很好......通常1级的支持不能处理技术的东西)
我正在使用phonegap和JQM开发应用程序.我有个问题.任何人都可以告诉我为什么我在启动应用程序时在日志中出现此错误.
10-09 13:47:33.316: D/CordovaWebView(26882): >>> loadUrlNow()
10-09 13:47:33.320: D/DroidGap(26882): onMessage(onNativeReady,null)
10-09 13:47:33.320: D/DroidGap(26882): onMessage(onPageFinished,file:///android_asset/www/index.html)
10-09 13:47:33.363: E/SQLiteLog(26882): (14) cannot open file at line 30174 of [00bb9c9ce4]
10-09 13:47:33.363: E/SQLiteLog(26882): (14) os_unix.c:30174: (2) open(/CachedGeoposition.db) -
10-09 13:47:33.371: D/WebKit(26882): ERROR:
10-09 13:47:33.371: D/WebKit(26882): SQLite database failed to load from /CachedGeoposition.db
10-09 13:47:33.371: D/WebKit(26882): Cause - unable to open database file
10-09 13:47:33.371: D/WebKit(26882): external/webkit/Source/WebCore/platform/sql/SQLiteDatabase.cpp(71) : bool WebCore::SQLiteDatabase::open(const WTF::String&, bool)
10-09 13:47:33.461: D/DroidGap(26882): onMessage(networkconnection,3g)
Run Code Online (Sandbox Code Playgroud)
这是我的清单
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="***.mobile"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8" …Run Code Online (Sandbox Code Playgroud) 在我将 Ubuntu 更新到 12.04\xef\xbc\x8c 后,我的系统速度变慢,并且警告我磁盘剩余空间较少。我检查了我的磁盘,发现文件/var/log/cups/error_log \ 的大小为78G!。我检查了这个文件,发现它充满了“订阅 dbus:// 的通知程序离开重试重试”......\n这里发生了什么?我能做什么?
\n我已经在我的网站上工作了一年多了,我非常渴望最终将它放在那里供人们使用。然而它已经变得相当大了——我几乎想说超出了我的控制——最重要的是,我实际上只是一个自学的业余程序员。
所以我想确保 php 产生的任何错误都记录在一个文件中,这样我就可以访问该文件并跟踪错误。
目前我的设置如下:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', 1);
ini_set('error_log', 'errors.log');
?>
Run Code Online (Sandbox Code Playgroud)
到目前为止效果很好,我的 error.log 文件将包含如下内容:
[14-May-2013 00:16:26] PHP 注意:未定义的变量:/home/www/dir/index.php 第 14 行中不存在变量[14-May-2013 00:16:28] PHP 注意:未定义的变量:第 14 行 /home/www/dir/index.php 中不存在变量
太好了,错误已记录。
但现在我有一个问题:
他们都排成一排,没有间断。使其难以阅读。如何在新行中获取每个错误?
我看到有一个时间戳。惊人的!我如何添加用户的 IP 地址等内容或任何其他自定义内容?
再次,我的问题:
如何更改 PHP 在错误日志文件中写入错误的方式? 特别是,如何在记录每个错误后创建一个新行,以便 error.log 文件更易于阅读。如何添加自定义数据和值(例如 IP 地址)?
答案: 我最终做了以下事情 - 这似乎在某种程度上重现了 php 按标准所做的事情,并且可以从那里进行修改。
<?php
function my_error_handler($type, $message, $file, $line, $vars)
{
switch($type)
{
case 1: // 1 //
$type_str = 'ERROR';
break;
case 2: // 2 //
$type_str = 'WARNING';
break; …Run Code Online (Sandbox Code Playgroud) 我使用PHPStorm开发 PHP Web 应用程序并使用其内置的 PHPUnit 测试运行器。在 IDE 的输出窗口中,它显示输出缓冲区(例如,已回显的任何内容)。
ini_set('display_errors', 'On')我可以看到使用和出现的错误error_reporting(E_ALL)。但是,使用的任何输出都error_log()不会显示(但会在错误日志中显示)。
有没有办法让写入错误日志的任何内容也显示在输出缓冲区中?
我正在尝试curl在php文件中运行命令并尝试在错误日志文件中列出其输出.除了我从exec()函数中获得的错误之外,文件中列出了所有php错误.我正在尝试的PHP代码是:
exec("nohup curl --output ".$_SERVER['DOCUMENT_ROOT']."/abc.mp3 http://192.99.8.170:8098/stream/1; --max-time $time_in_seconds > /devnull&");
Run Code Online (Sandbox Code Playgroud)
任何人都可以请求帮助,以便我可以在错误日志文件中获得此命令生成的错误.我已经google了这个,但无法获得足够的结果.
谢谢!