Skip to content

Commit 01dcc01

Browse files
authored
Merge pull request #11 from bufferapp/task/manage-verbosity
Write logs according the verbosity level defined
2 parents df34d7e + 49a9f50 commit 01dcc01

File tree

2 files changed

+26
-14
lines changed

2 files changed

+26
-14
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "bufferapp/php-bufflog",
33
"description": "PHP log libraries for Buffer services",
4-
"version": "0.1.1",
4+
"version": "0.1.2",
55
"require": {
66
"php": "^7.1",
77
"monolog/monolog": "^1.20",

src/BuffLog/BuffLog.php

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,16 @@ class BuffLog {
99
protected static $instance;
1010
private static $logger = null;
1111

12-
private static $logOutputMethods = ['debug', 'info', 'notice', 'warning', 'error', 'critical'];
13-
private static $extraAllowedMethods = ['getName', 'pushHandler', 'setHandlers', 'getHandlers', 'pushProcessor', 'getProcessors'];
12+
// default verbosity starting at this level
13+
private static $verbosityLevel = Logger::NOTICE;
14+
15+
// verbosity can be changed with setting this env var
16+
public static $logLevelEnvVar = "LOG_LEVEL";
17+
18+
// we can use strtolower(Logger::getLevels()) instead
19+
private static $logOutputMethods = ['debug', 'info', 'notice', 'warning', 'error', 'critical'];
20+
21+
private static $extraAllowedMethods = ['getName', 'pushHandler', 'setHandlers', 'getHandlers', 'pushProcessor', 'getProcessors', 'getLevels'];
1422

1523
/**
1624
* Method to return the Monolog instance
@@ -32,7 +40,19 @@ protected static function configureInstance()
3240
// define the logger name. This will make it easier for developers
3341
// to read and friendlier to identify where come the logs at a glance
3442
$logger = new Logger('php-bufflog');
35-
$handler = new StreamHandler('php://stdout');
43+
44+
$logLevelFromEnv = getenv(self::$logLevelEnvVar);
45+
$monologLevels = $logger->getLevels();
46+
if ($logLevelFromEnv) {
47+
// only if the level exists, we change the verbosity level
48+
if (key_exists($logLevelFromEnv, $monologLevels)) {
49+
self::$verbosityLevel = $monologLevels[$logLevelFromEnv];
50+
} else {
51+
error_log(self::$logLevelEnvVar . "={$logLevelFromEnv} verbosity level does not exists. Please use: " . implode(', ', array_keys($monologLevels)));
52+
}
53+
}
54+
55+
$handler = new StreamHandler('php://stdout', self::$verbosityLevel);
3656
$handler->setFormatter( new \Monolog\Formatter\JsonFormatter() );
3757
$logger->pushHandler($handler);
3858
self::$instance = $logger;
@@ -47,24 +67,16 @@ public static function __callStatic($methodName, $args)
4767

4868
if (in_array($methodName, self::$logOutputMethods)) {
4969

50-
// @TODO: need to make sure we "output" only the correct level of log
51-
// old version looked like:
52-
// self::setVerbosity();
53-
// if (self::$currentVerbosity > Logger::WARNING) {
54-
// return;
55-
// }
56-
5770
self::enrichLog();
5871
}
5972
// Where the magic happen. We "proxy" functions name with arguments to the Monolog instance
6073
return call_user_func_array(array(self::getLogger(), $methodName), $args);
6174

6275
} else {
63-
6476
error_log("BuffLog::$methodName() is not supported yet. Add it to the BuffLog whitelist to allow it");
6577
}
6678
} else {
67-
error_log("BuffLog::$methodName() does not exist");
79+
error_log("BuffLog::$methodName() method does not exist");
6880
}
6981
}
7082

@@ -84,7 +96,7 @@ private static function enrichLog()
8496
// 'profileID' => $user->getProfileID()
8597
// );
8698

87-
// Add traces information to logs to be able correlate with APM
99+
// Add traces information to be able to correlate logs with APM
88100
$ddTraceSpan = \DDTrace\GlobalTracer::get()->getActiveSpan();
89101
$record['context']['dd'] = [
90102
"trace_id" => $ddTraceSpan->getTraceId(),

0 commit comments

Comments
 (0)