Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4093711
ConsoleLogger.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
ConsoleLogger.php
View Options
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace
Symfony\Component\Console\Logger
;
use
Psr\Log\AbstractLogger
;
use
Psr\Log\InvalidArgumentException
;
use
Psr\Log\LogLevel
;
use
Symfony\Component\Console\Output\ConsoleOutputInterface
;
use
Symfony\Component\Console\Output\OutputInterface
;
/**
* PSR-3 compliant console logger.
*
* @author Kévin Dunglas <dunglas@gmail.com>
*
* @see https://www.php-fig.org/psr/psr-3/
*/
class
ConsoleLogger
extends
AbstractLogger
{
public
const
INFO
=
'info'
;
public
const
ERROR
=
'error'
;
private
array
$verbosityLevelMap
=
[
LogLevel
::
EMERGENCY
=>
OutputInterface
::
VERBOSITY_NORMAL
,
LogLevel
::
ALERT
=>
OutputInterface
::
VERBOSITY_NORMAL
,
LogLevel
::
CRITICAL
=>
OutputInterface
::
VERBOSITY_NORMAL
,
LogLevel
::
ERROR
=>
OutputInterface
::
VERBOSITY_NORMAL
,
LogLevel
::
WARNING
=>
OutputInterface
::
VERBOSITY_NORMAL
,
LogLevel
::
NOTICE
=>
OutputInterface
::
VERBOSITY_VERBOSE
,
LogLevel
::
INFO
=>
OutputInterface
::
VERBOSITY_VERY_VERBOSE
,
LogLevel
::
DEBUG
=>
OutputInterface
::
VERBOSITY_DEBUG
,
];
private
array
$formatLevelMap
=
[
LogLevel
::
EMERGENCY
=>
self
::
ERROR
,
LogLevel
::
ALERT
=>
self
::
ERROR
,
LogLevel
::
CRITICAL
=>
self
::
ERROR
,
LogLevel
::
ERROR
=>
self
::
ERROR
,
LogLevel
::
WARNING
=>
self
::
INFO
,
LogLevel
::
NOTICE
=>
self
::
INFO
,
LogLevel
::
INFO
=>
self
::
INFO
,
LogLevel
::
DEBUG
=>
self
::
INFO
,
];
private
bool
$errored
=
false
;
public
function
__construct
(
private
OutputInterface
$output
,
array
$verbosityLevelMap
=
[],
array
$formatLevelMap
=
[],
)
{
$this
->
verbosityLevelMap
=
$verbosityLevelMap
+
$this
->
verbosityLevelMap
;
$this
->
formatLevelMap
=
$formatLevelMap
+
$this
->
formatLevelMap
;
}
public
function
log
(
$level
,
$message
,
array
$context
=
[]):
void
{
if
(!
isset
(
$this
->
verbosityLevelMap
[
$level
]))
{
throw
new
InvalidArgumentException
(
\sprintf
(
'The log level "%s" does not exist.'
,
$level
));
}
$output
=
$this
->
output
;
// Write to the error output if necessary and available
if
(
self
::
ERROR
===
$this
->
formatLevelMap
[
$level
])
{
if
(
$this
->
output
instanceof
ConsoleOutputInterface
)
{
$output
=
$output
->
getErrorOutput
();
}
$this
->
errored
=
true
;
}
// the if condition check isn't necessary -- it's the same one that $output will do internally anyway.
// We only do it for efficiency here as the message formatting is relatively expensive.
if
(
$output
->
getVerbosity
()
>=
$this
->
verbosityLevelMap
[
$level
])
{
$output
->
writeln
(
\sprintf
(
'<%1$s>[%2$s] %3$s</%1$s>'
,
$this
->
formatLevelMap
[
$level
],
$level
,
$this
->
interpolate
(
$message
,
$context
)),
$this
->
verbosityLevelMap
[
$level
]);
}
}
/**
* Returns true when any messages have been logged at error levels.
*/
public
function
hasErrored
():
bool
{
return
$this
->
errored
;
}
/**
* Interpolates context values into the message placeholders.
*
* @author PHP Framework Interoperability Group
*/
private
function
interpolate
(
string
$message
,
array
$context
):
string
{
if
(!
str_contains
(
$message
,
'{'
))
{
return
$message
;
}
$replacements
=
[];
foreach
(
$context
as
$key
=>
$val
)
{
if
(
null
===
$val
||
\is_scalar
(
$val
)
||
$val
instanceof
\Stringable
)
{
$replacements
[
"{{$key}}"
]
=
$val
;
}
elseif
(
$val
instanceof
\DateTimeInterface
)
{
$replacements
[
"{{$key}}"
]
=
$val
->
format
(
\DateTimeInterface
::
RFC3339
);
}
elseif
(
\is_object
(
$val
))
{
$replacements
[
"{{$key}}"
]
=
'[object '
.
$val
::
class
.
']'
;
}
else
{
$replacements
[
"{{$key}}"
]
=
'['
.
\gettype
(
$val
).
']'
;
}
}
return
strtr
(
$message
,
$replacements
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Aug 18 2026, 12:57 (4 w, 3 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
4b/61/313031184fa302718479c91336e0
Default Alt Text
ConsoleLogger.php (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment