Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:122293 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 69881 invoked from network); 6 Feb 2024 14:39:51 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 6 Feb 2024 14:39:51 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1707230443; bh=BaZhMP5UypjYPPepYTGr5mT0pIh6YGzYLgkYyMsO334=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=k/Al+PMihsY2QwhHSaRjFNJ5tTxsM45k5IyinfK14MJLdcr7EawC00A1F+3o8/XuT eDWFmbS/KQBpDPBfeT7KIK+HBS7r7JwcgD4IgTF8MDL/ctEEuqw0uBt/Ke340QJuRb 7vVaXdJPVKXDZB+TAP7/zvNs9V1C8T30D/aExB/RhJ86z8owBWIsHFPSN/MY512D/u vHclnbLxhapeR7ww/oRUMwXF1xIqjJ6K5hMiEZ8Sj/reVIbIAhThniFiiCKxltyokl D6EAfn4pE/rB95vrInNZpFk+utO2Mi270JZO3H2iSFzfABWj7NpXH118YRVWu3Uq42 OhEd0NOnVKNyQ== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 9114B180039 for ; Tue, 6 Feb 2024 06:40:42 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-0.6 required=5.0 tests=BAYES_00,BODY_8BITS, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,DMARC_PASS, FREEMAIL_FROM,FREEMAIL_REPLY,HTML_MESSAGE,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=4.0.0 X-Spam-Virus: No X-Envelope-From: Received: from mail-il1-f174.google.com (mail-il1-f174.google.com [209.85.166.174]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Tue, 6 Feb 2024 06:40:36 -0800 (PST) Received: by mail-il1-f174.google.com with SMTP id e9e14a558f8ab-363bfb0f3f4so2884365ab.1 for ; Tue, 06 Feb 2024 06:39:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1707230383; x=1707835183; darn=lists.php.net; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=BaZhMP5UypjYPPepYTGr5mT0pIh6YGzYLgkYyMsO334=; b=jIkeZBcFf3GRZGSwh8Ik85F4gYuEkKcgg6w0UK3z5NOiQc5ZpWc+HgKu59pBu0p1uM chMXqVCYngqEjnVtg7Xuo0f0+1UZPv+VFf1qA4gYlerbSFoEGPb7ctfmIp7OdLzxIdKN 8nUeOFEtfa1R5ydGc/BDVQ9qKzfStyuGs0ggDlYd7GzzHuCk2q4MJNXd8AIZI3liNAUB OhCSzYaaDvpeoKKv9CGpqmmVQtZ8b6Fq6EyFXPluJAljCRFupIbYO/09lQEjbl9DgwPB QUfiPxJUCEG8DG1/i+mT4Rz7q55XqivFzg0BCq4ZucwsX4WoRmNF3U886G7aAofbNE5U WaEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707230383; x=1707835183; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=BaZhMP5UypjYPPepYTGr5mT0pIh6YGzYLgkYyMsO334=; b=q5e03gMAQIvA7Sajd3WDnw2Fh9krxfVsblnIP9P1mje6qNhaZOt8doVKO4XXKTQL/I PIzGTO6iM9PD86YUrfpK6PV6aeLMh+Nz6AkJEm9NOT52xnbdFbg3wOqqERJNmqenLkwQ 83f+JDBnxnrJkx5td7IkaWVyZSdwngaEj1fk1zLWYUZmsF6mX4Ux2BFpNBo8KF/J9J8L VJ1AdozUiCwMcox6etMcTHIK4w2N7pQJ7avuwJetY5W4KZFGeGsHZPLB/kQyUJnNhJNo EsG+qPjzdBz5wtgT38YmmNPq75BfmpBomZORPIjkq0q53gg8GzHKjK4gW0OG+8rXuGz9 g6Gw== X-Gm-Message-State: AOJu0YxBSkh6Q49b04/NM59wQWPaiZ0T1IqJr+Io7wT7A2d2rpgoOCtJ FJ/70QJX9TSdlXNsdr4weph11EWDrd3JkAJF7c6Vgy7TOm8zqmPMdqAX2gahAfaxekZKkhUnqIb RL4Lh2vuX8QwbQGhMOntqOdJfX08= X-Google-Smtp-Source: AGHT+IGTQqjRXqTIb6NrBG29vhiKuaUK4+vEhOQ93U8iB8fZ3YcToACUVf9mLhA3NHwpgVJonTA0gWh423Dz6DDV9gg= X-Received: by 2002:a05:6e02:2181:b0:363:b166:ea2 with SMTP id j1-20020a056e02218100b00363b1660ea2mr3911858ila.9.1707230383368; Tue, 06 Feb 2024 06:39:43 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: Date: Tue, 6 Feb 2024 16:39:07 +0200 Message-ID: To: =?UTF-8?B?0JPRgNC40LPQvtGA0LjQuSBTZW5pb3IgUEhQIC8g0KDQsNC30YDQsNCx0L7RgtGH0LjQuiBXZWI=?= <6562680@gmail.com> Cc: internals@lists.php.net Content-Type: multipart/alternative; boundary="0000000000008cef8f0610b78c3c" Subject: Re: [PHP-DEV] Feature request: https://github.com/php/php-src/issues/13301 From: arvids.godjuks@gmail.com (Arvids Godjuks) --0000000000008cef8f0610b78c3c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 6 Feb 2024 at 15:58, =D0=93=D1=80=D0=B8=D0=B3=D0=BE=D1=80=D0=B8=D0= =B9 Senior PHP / =D0=A0=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0= =B8=D0=BA Web < 6562680@gmail.com> wrote: > Hello, please discuss about error collecting implementation in next PHP > releases > > Exceptions have common differences that restrict using them to collect > errors > 1. Timeloss (trace collection) on call new() on any class that implements > \Throwable > 2. To collect errors and return it to the upper level you have to change > the return signature, so most of the time rewrite the full tree and chang= e > all signatures, that's inapplicable and causes more refactor time without > any benefits > 3. Exceptions will break code, so you need to catch them as much closely = as > possible to place you throw it (additional refactoring) > > What I want from this feature: > - while I am writing the api, I need not only "log" the errors, but be ab= le > to send all script errors to json output, including warnings, errors, and > deep nested. It will reduce the time of debugging, otherwise i have to > download log files from server or configure external system like sentry > that collects all errors by groups/chains > > Suggested solution: > - add non-breakable interface and language construct `raise` to "throw" > error without collecting trace > - that error could be any scalar or object, or you can implement new > interface for them, keeping that is nested and taggable array > - this `raise` could be catched same way as \Throwable allowing log it > anywhere you need or re-`raise` again > - `raise` statement won't start to collapse/break code, so it could be > skipped without affecting application > > Current solution: > a) 2 classes - ErrorBag/ErrorBagStack. > > b) native functions like _error()/_warning() that stores errors to the > current ErrorBag if it exists. > > c) ErrorBag exists only if you initialize it: > - from the upper level (you need to collect) > - directly inside a function (you need to decide return/continue dependin= g > on its emptiness) > - otherwise _error()/_warning() does nothing > > d) once you "catch" results of _error()/_warning() you often need it to > merge the result to the current errorbag, mark it with a nesting group or > with the tag. Nesting group is required once you debug code (you will see > the log), tags will needed once you want to copy results from one bag to > another (closest example - reduce queue with unique function, do action, > then work with initial data) > > e) useful feature is merge_as_warning($errorBag) - to prevent the current > error bag to return `true` on call ->hasErrors(). Errors are related to l= ow > level function, and possibly you already do actions that allow you just > store them. > > f) searching inside the error bag by nesting sequence, or by tag, or by > error type. Error type helps the same as try/catch, tag helps if you want > to save errors to several destinations without memory losses, and nesting > will help most of the time in debugging. > > Thanks for your attention. > > -- > +375 (29) 676-48-68 <+375296764868> / Mobile - =D0=BF=D1=80=D0=B5=D0=B4= =D0=BF=D0=BE=D1=87=D0=B8=D1=82=D0=B0=D0=B5=D0=BC=D1=8B=D0=B9 =D1=81=D0=BF= =D0=BE=D1=81=D0=BE=D0=B1 =D1=81=D0=B2=D1=8F=D0=B7=D0=B8 > https://t.me/gzhegow / https://t.me/%2B375296764868 / Telegram > 6562680@gmail.com > Hello, This is an application design-level issue, not a language issue. All you need to do is implement a collector on the logger you use that will store the info you want and let you ask for that info just before you push data into the JSON encoder you use from that logger collector. It's as simple as that, you don't even need to change your existing code if it already logs the information. --=20 Arv=C4=ABds Godjuks +371 26 851 664 arvids.godjuks@gmail.com Telegram: @psihius https://t.me/psihius --0000000000008cef8f0610b78c3c--