diff --git a/src/applications/config/option/PhabricatorAccessLogConfigOptions.php b/src/applications/config/option/PhabricatorAccessLogConfigOptions.php index 6183f9936f..9ae60825ea 100644 --- a/src/applications/config/option/PhabricatorAccessLogConfigOptions.php +++ b/src/applications/config/option/PhabricatorAccessLogConfigOptions.php @@ -1,135 +1,136 @@ pht('The controller or workflow which handled the request.'), 'c' => pht('The HTTP response code or process exit code.'), 'D' => pht('The request date.'), 'e' => pht('Epoch timestamp.'), 'h' => pht("The webserver's host name."), 'p' => pht('The PID of the server process.'), 'r' => pht('The remote IP.'), 'T' => pht('The request duration, in microseconds.'), 'U' => pht('The request path, or request target.'), 'm' => pht('For conduit, the Conduit method which was invoked.'), 'u' => pht('The logged-in username, if one is logged in.'), 'P' => pht('The logged-in user PHID, if one is logged in.'), 'i' => pht('Request input, in bytes.'), 'o' => pht('Request output, in bytes.'), + 'I' => pht('Cluster instance name, if configured.'), ); $http_map = $common_map + array( 'R' => pht('The HTTP referrer.'), 'M' => pht('The HTTP method.'), ); $ssh_map = $common_map + array( 's' => pht('The system user.'), 'S' => pht('The system sudo user.'), 'k' => pht('ID of the SSH key used to authenticate the request.'), ); $http_desc = pht( 'Format for the HTTP access log. Use `%s` to set the path. '. 'Available variables are:', 'log.access.path'); $http_desc .= "\n\n"; $http_desc .= $this->renderMapHelp($http_map); $ssh_desc = pht( 'Format for the SSH access log. Use %s to set the path. '. 'Available variables are:', 'log.ssh.path'); $ssh_desc .= "\n\n"; $ssh_desc .= $this->renderMapHelp($ssh_map); return array( $this->newOption('log.access.path', 'string', null) ->setLocked(true) ->setSummary(pht('Access log location.')) ->setDescription( pht( "To enable the Phabricator access log, specify a path. The ". "Phabricator access than normal HTTP access logs (for instance, ". "it can show logged-in users, controllers, and other application ". "data).\n\n". "If not set, no log will be written.")) ->addExample( null, pht('Disable access log.')) ->addExample( '/var/log/phabricator/access.log', pht('Write access log here.')), $this->newOption( 'log.access.format', // NOTE: This is 'wild' intead of 'string' so "\t" and such can be // specified. 'wild', "[%D]\t%p\t%h\t%r\t%u\t%C\t%m\t%U\t%R\t%c\t%T") ->setLocked(true) ->setSummary(pht('Access log format.')) ->setDescription($http_desc), $this->newOption('log.ssh.path', 'string', null) ->setLocked(true) ->setSummary(pht('SSH log location.')) ->setDescription( pht( "To enable the Phabricator SSH log, specify a path. The ". "access log can provide more detailed information about SSH ". "access than a normal SSH log (for instance, it can show ". "logged-in users, commands, and other application data).\n\n". "If not set, no log will be written.")) ->addExample( null, pht('Disable SSH log.')) ->addExample( '/var/log/phabricator/ssh.log', pht('Write SSH log here.')), $this->newOption( 'log.ssh.format', 'wild', "[%D]\t%p\t%h\t%r\t%s\t%S\t%u\t%C\t%U\t%c\t%T\t%i\t%o") ->setLocked(true) ->setSummary(pht('SSH log format.')) ->setDescription($ssh_desc), ); } private function renderMapHelp(array $map) { $desc = ''; foreach ($map as $key => $kdesc) { $desc .= " - `%".$key."` ".$kdesc."\n"; } $desc .= "\n"; $desc .= pht( "If a variable isn't available (for example, %%m appears in the file ". "format but the request is not a Conduit request), it will be rendered ". "as '-'"); $desc .= "\n\n"; $desc .= pht( "Note that the default format is subject to change in the future, so ". "if you rely on the log's format, specify it explicitly."); return $desc; } } diff --git a/src/infrastructure/log/PhabricatorAccessLog.php b/src/infrastructure/log/PhabricatorAccessLog.php index d3d9979aac..2ffa0577a8 100644 --- a/src/infrastructure/log/PhabricatorAccessLog.php +++ b/src/infrastructure/log/PhabricatorAccessLog.php @@ -1,41 +1,42 @@ setFailQuietly(true) ->setData( array( 'D' => date('r'), 'h' => php_uname('n'), 'p' => getmypid(), 'e' => time(), + 'I' => PhabricatorEnv::getEnvConfig('cluster.instance'), )); self::$log = $log; } return self::$log; } } diff --git a/src/infrastructure/log/PhabricatorSSHLog.php b/src/infrastructure/log/PhabricatorSSHLog.php index 9f9f75b41b..de4c270f72 100644 --- a/src/infrastructure/log/PhabricatorSSHLog.php +++ b/src/infrastructure/log/PhabricatorSSHLog.php @@ -1,52 +1,53 @@ date('r'), 'h' => php_uname('n'), 'p' => getmypid(), 'e' => time(), + 'I' => PhabricatorEnv::getEnvConfig('cluster.instance'), ); $sudo_user = PhabricatorEnv::getEnvConfig('phd.user'); if (strlen($sudo_user)) { $data['S'] = $sudo_user; } if (function_exists('posix_geteuid')) { $system_uid = posix_geteuid(); $system_info = posix_getpwuid($system_uid); $data['s'] = idx($system_info, 'name'); } $client = getenv('SSH_CLIENT'); if (strlen($client)) { $remote_address = head(explode(' ', $client)); $data['r'] = $remote_address; } $log = id(new PhutilDeferredLog($path, $format)) ->setFailQuietly(true) ->setData($data); self::$log = $log; } return self::$log; } }