Why preference is not working in Magento 2?












0















I am trying to implement error report in magento 2 so for that purpose i would like to mail all the errors in email. So I started with prefernece.



di.xml



<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<preference for="MagentoFrameworkAppErrorHandler" type="PulsestormHelloWorldMVVMModelErrorHandler"/>
</config>


ErrorHandler.php



<?php 
namespace PulsestormHelloWorldMVVMModel;


/**
* An error handler that converts runtime errors into exceptions
*/
class ErrorHandler extends MagentoFrameworkAppErrorHandler
{
protected $errorPhrases = [
E_ERROR => 'Error',
E_WARNING => 'Warning',
E_PARSE => 'Parse Error',
E_NOTICE => 'Notice',
E_CORE_ERROR => 'Core Error',
E_CORE_WARNING => 'Core Warning',
E_COMPILE_ERROR => 'Compile Error',
E_COMPILE_WARNING => 'Compile Warning',
E_USER_ERROR => 'User Error',
E_USER_WARNING => 'User Warning',
E_USER_NOTICE => 'User Notice',
E_STRICT => 'Strict Notice',
E_RECOVERABLE_ERROR => 'Recoverable Error',
E_DEPRECATED => 'Deprecated Functionality',
E_USER_DEPRECATED => 'User Deprecated Functionality',
];

public function handler($errorNo, $errorStr, $errorFile, $errorLine)
{ echo"hii"; exit;
if (strpos($errorStr, 'DateTimeZone::__construct') !== false) {
// there's no way to distinguish between caught system exceptions and warnings
return false;
}

$errorNo = $errorNo & error_reporting();
if ($errorNo == 0) {
return false;
}

$msg = isset($this->errorPhrases[$errorNo]) ? $this->errorPhrases[$errorNo] : "Unknown error ({$errorNo})";
$msg .= ": {$errorStr} in {$errorFile} on line {$errorLine}";
throw new Exception($msg);
}
}


I try echo exit at top of class (after namespace) but it showing nothing it means class is not calling. Is there any mistake in di.xml.










share|improve this question





























    0















    I am trying to implement error report in magento 2 so for that purpose i would like to mail all the errors in email. So I started with prefernece.



    di.xml



    <?xml version="1.0"?>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
    <preference for="MagentoFrameworkAppErrorHandler" type="PulsestormHelloWorldMVVMModelErrorHandler"/>
    </config>


    ErrorHandler.php



    <?php 
    namespace PulsestormHelloWorldMVVMModel;


    /**
    * An error handler that converts runtime errors into exceptions
    */
    class ErrorHandler extends MagentoFrameworkAppErrorHandler
    {
    protected $errorPhrases = [
    E_ERROR => 'Error',
    E_WARNING => 'Warning',
    E_PARSE => 'Parse Error',
    E_NOTICE => 'Notice',
    E_CORE_ERROR => 'Core Error',
    E_CORE_WARNING => 'Core Warning',
    E_COMPILE_ERROR => 'Compile Error',
    E_COMPILE_WARNING => 'Compile Warning',
    E_USER_ERROR => 'User Error',
    E_USER_WARNING => 'User Warning',
    E_USER_NOTICE => 'User Notice',
    E_STRICT => 'Strict Notice',
    E_RECOVERABLE_ERROR => 'Recoverable Error',
    E_DEPRECATED => 'Deprecated Functionality',
    E_USER_DEPRECATED => 'User Deprecated Functionality',
    ];

    public function handler($errorNo, $errorStr, $errorFile, $errorLine)
    { echo"hii"; exit;
    if (strpos($errorStr, 'DateTimeZone::__construct') !== false) {
    // there's no way to distinguish between caught system exceptions and warnings
    return false;
    }

    $errorNo = $errorNo & error_reporting();
    if ($errorNo == 0) {
    return false;
    }

    $msg = isset($this->errorPhrases[$errorNo]) ? $this->errorPhrases[$errorNo] : "Unknown error ({$errorNo})";
    $msg .= ": {$errorStr} in {$errorFile} on line {$errorLine}";
    throw new Exception($msg);
    }
    }


    I try echo exit at top of class (after namespace) but it showing nothing it means class is not calling. Is there any mistake in di.xml.










    share|improve this question



























      0












      0








      0








      I am trying to implement error report in magento 2 so for that purpose i would like to mail all the errors in email. So I started with prefernece.



      di.xml



      <?xml version="1.0"?>
      <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
      <preference for="MagentoFrameworkAppErrorHandler" type="PulsestormHelloWorldMVVMModelErrorHandler"/>
      </config>


      ErrorHandler.php



      <?php 
      namespace PulsestormHelloWorldMVVMModel;


      /**
      * An error handler that converts runtime errors into exceptions
      */
      class ErrorHandler extends MagentoFrameworkAppErrorHandler
      {
      protected $errorPhrases = [
      E_ERROR => 'Error',
      E_WARNING => 'Warning',
      E_PARSE => 'Parse Error',
      E_NOTICE => 'Notice',
      E_CORE_ERROR => 'Core Error',
      E_CORE_WARNING => 'Core Warning',
      E_COMPILE_ERROR => 'Compile Error',
      E_COMPILE_WARNING => 'Compile Warning',
      E_USER_ERROR => 'User Error',
      E_USER_WARNING => 'User Warning',
      E_USER_NOTICE => 'User Notice',
      E_STRICT => 'Strict Notice',
      E_RECOVERABLE_ERROR => 'Recoverable Error',
      E_DEPRECATED => 'Deprecated Functionality',
      E_USER_DEPRECATED => 'User Deprecated Functionality',
      ];

      public function handler($errorNo, $errorStr, $errorFile, $errorLine)
      { echo"hii"; exit;
      if (strpos($errorStr, 'DateTimeZone::__construct') !== false) {
      // there's no way to distinguish between caught system exceptions and warnings
      return false;
      }

      $errorNo = $errorNo & error_reporting();
      if ($errorNo == 0) {
      return false;
      }

      $msg = isset($this->errorPhrases[$errorNo]) ? $this->errorPhrases[$errorNo] : "Unknown error ({$errorNo})";
      $msg .= ": {$errorStr} in {$errorFile} on line {$errorLine}";
      throw new Exception($msg);
      }
      }


      I try echo exit at top of class (after namespace) but it showing nothing it means class is not calling. Is there any mistake in di.xml.










      share|improve this question
















      I am trying to implement error report in magento 2 so for that purpose i would like to mail all the errors in email. So I started with prefernece.



      di.xml



      <?xml version="1.0"?>
      <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
      <preference for="MagentoFrameworkAppErrorHandler" type="PulsestormHelloWorldMVVMModelErrorHandler"/>
      </config>


      ErrorHandler.php



      <?php 
      namespace PulsestormHelloWorldMVVMModel;


      /**
      * An error handler that converts runtime errors into exceptions
      */
      class ErrorHandler extends MagentoFrameworkAppErrorHandler
      {
      protected $errorPhrases = [
      E_ERROR => 'Error',
      E_WARNING => 'Warning',
      E_PARSE => 'Parse Error',
      E_NOTICE => 'Notice',
      E_CORE_ERROR => 'Core Error',
      E_CORE_WARNING => 'Core Warning',
      E_COMPILE_ERROR => 'Compile Error',
      E_COMPILE_WARNING => 'Compile Warning',
      E_USER_ERROR => 'User Error',
      E_USER_WARNING => 'User Warning',
      E_USER_NOTICE => 'User Notice',
      E_STRICT => 'Strict Notice',
      E_RECOVERABLE_ERROR => 'Recoverable Error',
      E_DEPRECATED => 'Deprecated Functionality',
      E_USER_DEPRECATED => 'User Deprecated Functionality',
      ];

      public function handler($errorNo, $errorStr, $errorFile, $errorLine)
      { echo"hii"; exit;
      if (strpos($errorStr, 'DateTimeZone::__construct') !== false) {
      // there's no way to distinguish between caught system exceptions and warnings
      return false;
      }

      $errorNo = $errorNo & error_reporting();
      if ($errorNo == 0) {
      return false;
      }

      $msg = isset($this->errorPhrases[$errorNo]) ? $this->errorPhrases[$errorNo] : "Unknown error ({$errorNo})";
      $msg .= ": {$errorStr} in {$errorFile} on line {$errorLine}";
      throw new Exception($msg);
      }
      }


      I try echo exit at top of class (after namespace) but it showing nothing it means class is not calling. Is there any mistake in di.xml.







      magento2 error preference






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 36 mins ago









      Teja Bhagavan Kollepara

      3,01241949




      3,01241949










      asked Nov 9 '16 at 7:18









      Ramkishan SutharRamkishan Suthar

      2,28721435




      2,28721435






















          1 Answer
          1






          active

          oldest

          votes


















          1














          Error handler created not through DI, so preferences are not applicable



          see: https://github.com/magento/magento2/blob/develop/lib/internal/Magento/Framework/App/Bootstrap.php#L373



          The best way to log errors its change settings for PsrLogLoggerInterface that already used to log errors. Magento uses Monolog library for logging. For example, you can add MonologHandlerNativeMailerHandler in DI (see: https://github.com/magento/magento2/blob/develop/app/etc/di.xml#L183)



          But if you steel require to change ErrorHandler, you have only one way to do it.
          Copy class to your module and change as you need. Then add in your registration.php include of this file: like include(__DIR__. 'path/to/ErrorHandler.php')






          share|improve this answer


























          • What should i do that for this purpose. I am not getting anything. Please help @KAndy

            – Ramkishan Suthar
            Nov 9 '16 at 8:41











          • I update post with details

            – KAndy
            Nov 9 '16 at 19:01












          Your Answer








          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "479"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f144841%2fwhy-preference-is-not-working-in-magento-2%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          Error handler created not through DI, so preferences are not applicable



          see: https://github.com/magento/magento2/blob/develop/lib/internal/Magento/Framework/App/Bootstrap.php#L373



          The best way to log errors its change settings for PsrLogLoggerInterface that already used to log errors. Magento uses Monolog library for logging. For example, you can add MonologHandlerNativeMailerHandler in DI (see: https://github.com/magento/magento2/blob/develop/app/etc/di.xml#L183)



          But if you steel require to change ErrorHandler, you have only one way to do it.
          Copy class to your module and change as you need. Then add in your registration.php include of this file: like include(__DIR__. 'path/to/ErrorHandler.php')






          share|improve this answer


























          • What should i do that for this purpose. I am not getting anything. Please help @KAndy

            – Ramkishan Suthar
            Nov 9 '16 at 8:41











          • I update post with details

            – KAndy
            Nov 9 '16 at 19:01
















          1














          Error handler created not through DI, so preferences are not applicable



          see: https://github.com/magento/magento2/blob/develop/lib/internal/Magento/Framework/App/Bootstrap.php#L373



          The best way to log errors its change settings for PsrLogLoggerInterface that already used to log errors. Magento uses Monolog library for logging. For example, you can add MonologHandlerNativeMailerHandler in DI (see: https://github.com/magento/magento2/blob/develop/app/etc/di.xml#L183)



          But if you steel require to change ErrorHandler, you have only one way to do it.
          Copy class to your module and change as you need. Then add in your registration.php include of this file: like include(__DIR__. 'path/to/ErrorHandler.php')






          share|improve this answer


























          • What should i do that for this purpose. I am not getting anything. Please help @KAndy

            – Ramkishan Suthar
            Nov 9 '16 at 8:41











          • I update post with details

            – KAndy
            Nov 9 '16 at 19:01














          1












          1








          1







          Error handler created not through DI, so preferences are not applicable



          see: https://github.com/magento/magento2/blob/develop/lib/internal/Magento/Framework/App/Bootstrap.php#L373



          The best way to log errors its change settings for PsrLogLoggerInterface that already used to log errors. Magento uses Monolog library for logging. For example, you can add MonologHandlerNativeMailerHandler in DI (see: https://github.com/magento/magento2/blob/develop/app/etc/di.xml#L183)



          But if you steel require to change ErrorHandler, you have only one way to do it.
          Copy class to your module and change as you need. Then add in your registration.php include of this file: like include(__DIR__. 'path/to/ErrorHandler.php')






          share|improve this answer















          Error handler created not through DI, so preferences are not applicable



          see: https://github.com/magento/magento2/blob/develop/lib/internal/Magento/Framework/App/Bootstrap.php#L373



          The best way to log errors its change settings for PsrLogLoggerInterface that already used to log errors. Magento uses Monolog library for logging. For example, you can add MonologHandlerNativeMailerHandler in DI (see: https://github.com/magento/magento2/blob/develop/app/etc/di.xml#L183)



          But if you steel require to change ErrorHandler, you have only one way to do it.
          Copy class to your module and change as you need. Then add in your registration.php include of this file: like include(__DIR__. 'path/to/ErrorHandler.php')







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 9 '16 at 19:00

























          answered Nov 9 '16 at 7:36









          KAndyKAndy

          16.1k23245




          16.1k23245













          • What should i do that for this purpose. I am not getting anything. Please help @KAndy

            – Ramkishan Suthar
            Nov 9 '16 at 8:41











          • I update post with details

            – KAndy
            Nov 9 '16 at 19:01



















          • What should i do that for this purpose. I am not getting anything. Please help @KAndy

            – Ramkishan Suthar
            Nov 9 '16 at 8:41











          • I update post with details

            – KAndy
            Nov 9 '16 at 19:01

















          What should i do that for this purpose. I am not getting anything. Please help @KAndy

          – Ramkishan Suthar
          Nov 9 '16 at 8:41





          What should i do that for this purpose. I am not getting anything. Please help @KAndy

          – Ramkishan Suthar
          Nov 9 '16 at 8:41













          I update post with details

          – KAndy
          Nov 9 '16 at 19:01





          I update post with details

          – KAndy
          Nov 9 '16 at 19:01


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Magento Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f144841%2fwhy-preference-is-not-working-in-magento-2%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          What other Star Trek series did the main TNG cast show up in?

          Berlina muro

          Berlina aerponto