PHP set_exception_handler 设置异常处理函数

If you‘re handling sensitive data and you don‘t want exceptions logging details such as variable contents when you throw them, you may find yourself frustratedly looking for the bits and pieces that make up a normal stack trace output, so you can retain its legibility but just alter a few things. In that case, this may help you:

<?php

function exceptionHandler($exception) {

// these are our templates
    $traceline = "#%s %s(%s): %s(%s)";
    $msg = "PHP Fatal error:  Uncaught exception ‘%s‘ with message ‘%s‘ in %s:%s Stack trace: %s   thrown in %s on line %s";

// alter your trace as you please, here
    $trace = $exception->getTrace();
    foreach ($trace as $key => $stackPoint) {
        // I‘m converting arguments to their type
        // (prevents passwords from ever getting logged as anything other than ‘string‘)
        $trace[$key][‘args‘] = array_map(‘gettype‘, $trace[$key][‘args‘]);
    }

// build your tracelines
    $result = array();
    foreach ($trace as $key => $stackPoint) {
        $result[] = sprintf(
            $traceline,
            $key,
            $stackPoint[‘file‘],
            $stackPoint[‘line‘],
            $stackPoint[‘function‘],
            implode(‘, ‘, $stackPoint[‘args‘])
        );
    }
    // trace always ends with {main}
    $result[] = ‘#‘ . ++$key . ‘ {main}‘;

// write tracelines into main template
    $msg = sprintf(
        $msg,
        get_class($exception),
        $exception->getMessage(),
        $exception->getFile(),
        $exception->getLine(),
        implode(" ", $result),
        $exception->getFile(),
        $exception->getLine()
    );

// log or echo as you please
    error_log($msg);
}

?>

If you‘re not a fan of sprintf() or the duplicate $exception->getFile() and $exception->getLine() calls you can of course replace that as you like - consider this a mere compilation of the parts.

时间: 2024-10-13 05:02:20

PHP set_exception_handler 设置异常处理函数的相关文章

set_exception_handler 自定义异常处理

该函数用于创建运行时期间的用户自己的异常处理方法. set_exception_handler(error_function) 参数 必需.规定未捕获的异常发生时调用的函数. 该函数必须在调用 set_exception_handler() 函数之前定义. 这个异常处理函数需要需要一个参数,即抛出的 exception 对象. 提示:在这个异常处理程序被调用后,脚本会停止执行. <?php function my_exception($e){ //该函数必须在set_exception_hand

Webkit IDL中自定义[命名]属性的获取(Getter)以及设置(Setter)函数

一.自定义命名属性的获取(Getter)以及设置(Setter)函数: [CustomNamedGetter](i), [CustomNamedSetter](i) 命名属性的W3C链接如下:?The spec of named properties (注意,下面描述的webkit行为和W3C的规范是不同的) 总结: [CustomNamedGetter] 或者 [CustomNamedSetter] 允许你为命名属性的getter或者setter编写自己的绑定函数. 用法如下: [ Custo

CKFinder 弹出窗口操作并设置回调函数

CKFinder 弹出窗口操作并设置回调函数 官方例子参考CKFinderJava-2.4.1/ckfinder/_samples/popup.html 写一个与EXT集成的小例子 Ext.define("MyButton", { extend : "Ext.Button", text : "ckfinder", initComponent : function() { var me = this; Ext.apply(me, { handler

设置java函数的响应时间以及超时处理

一些事情的阻隔,然后把好不容易形成的习惯改变.想着尝试改变,却处处触及底线,敛起触角,继续向前.不知不觉,距上次已有2个礼拜了.尔后,卿域非我,子视无卿.一.应用场景在有些时候,我们利用debug运行一段代码的时候.会发现,当运行到某处时,编译器久久没有反应.这个过程,假设调用了别人的代码,或者远程的代码或者服务的时候出现的,亦或是自身代码的原因.我们暂时无法预测他的发生,亦或者是无法预期的事,例如远端服务断电,服务宕掉,本地连接尚未关闭.但出现这种情况,不能让人家干等着吧.况且,等个几小时也是

Android Studio中设置提示函数用法

Eclipse有一个很好的功能,就是当你代码调用某个android API时,鼠标移到对应的函数或者方法上,就会自动有一个悬浮窗提示该函数的说明(所包含的参数含义,该方法功能).迁移到Android Studio后,这个鼠标移到函数上,你发现悬浮窗不出来了.那么在Android Studio到底如何查看函数的说明呢. 在Android Studio中默认情况下是不会和Eclipse那样,鼠标移动到一个类或者方法或者变量上面,就会弹出悬浮框,显示相关的文档的.不过,Android Studio可以

JMeter参数化设置——通过函数助手

Now you can know everything in the world, but the only way you're findin' out that one is by givin' it a shot. 你可以了解世间万物,但追根溯源的唯一途径便是亲身尝试. 电影<心灵捕手> 测试用例描述: 性能测试要求:5个用户循环2次. 用例名称 操作步骤 预期结果 备注 新建项目并设置团队时统计项目总工时 1. 进入项目视图,点击右侧的"添加项目"链接.  系统会自

请编写&quot;改变颜色&quot;、&quot;改变宽高&quot;、&quot;隐藏内容&quot;、&quot;显示内容&quot;、&quot;取消设置&quot;的函数,点击相应按钮执行相应操作,点击&quot;取消设置&quot;按钮后,提示是否取消设置,如是执行操作,否则不做操作

<!DOCTYPE HTML><html><head><meta http-equiv="txttent-Type" txttent="text/html; charset=utf-8" /><title>javascript</title><style type="text/css">body{font-size:12px;}#txt{ height:400px

Windows下设置钩子函数

当用户在window下操作时,钩子函数可以根据你的设置勾取window的操作消息 1.定义钩子函数 HWINEVENTHOOK hook = SetWinEventHook( _eventMin, _eventMax, NULL, WinEventProcSTATIC, 0, 0, WINEVENT_OUTOFCONTEXT); 2.撤销设置的钩子 UnhookWinEvent(hook); 3.钩子事件处理函数 void ProcessForgroundMonitor::winEventPro

在C++工程中设置全局函数

在头文件中对该函数进行全局函数的声明: extern void Test(); 在cpp文件中进行函数的定义: void Test() { MessageBox(NULL,L"调用了C++的全局方法",L"提示",MB_OK); } 转载:http://blog.sina.com.cn/s/blog_6035d1770100hmx6.html