Index: wp-includes/default-constants.php
===================================================================
--- wp-includes/default-constants.php	(revision 18542)
+++ wp-includes/default-constants.php	(working copy)
@@ -49,7 +49,7 @@
 	if ( !defined('WP_DEBUG') )
 		define( 'WP_DEBUG', false );
 
-	// Add define('WP_DEBUG_DISPLAY', false); to wp-config.php use the globally configured setting for display_errors and not force errors to be displayed.
+	// Add define('WP_DEBUG_DISPLAY', null); to wp-config.php use the globally configured setting for display_errors and not force errors to be displayed. Use false to force display_errors off.
 	if ( !defined('WP_DEBUG_DISPLAY') )
 		define( 'WP_DEBUG_DISPLAY', true );
 
Index: wp-includes/load.php
===================================================================
--- wp-includes/load.php	(revision 18542)
+++ wp-includes/load.php	(working copy)
@@ -249,11 +249,12 @@
  * development environments.
  *
  * When WP_DEBUG_DISPLAY is true, WordPress will force errors to be displayed.
- * WP_DEBUG_DISPLAY defaults to true. Defining it as false prevents WordPress from
- * changing the global configuration setting. (Defining WP_DEBUG_DISPLAY as false
- * will never force errors to be hidden.)
+ * WP_DEBUG_DISPLAY defaults to true. Defining it as null prevents WordPress from
+ * changing the global configuration setting. Defining WP_DEBUG_DISPLAY as false
+ * will force errors to be hidden.
  *
- * When WP_DEBUG_LOG is true, errors will be logged to wp-content/debug.log.
+ * When WP_DEBUG_LOG is true, errors will be logged to wp-content/debug.log. When
+ * WP_DEBUG_LOG is a valid path, errors will be logged to the specified file.
  * WP_DEBUG_LOG defaults to false.
  *
  * @access private
@@ -270,10 +271,15 @@
 
 		if ( WP_DEBUG_DISPLAY )
 			ini_set( 'display_errors', 1 );
+		elseif ( null !== WP_DEBUG_DISPLAY )
+			ini_set( 'display_errors', 0 );
 
 		if ( WP_DEBUG_LOG ) {
 			ini_set( 'log_errors', 1 );
-			ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' );
+			if ( in_array( WP_DEBUG_LOG, array( true, 'true', 'TRUE', 1, '1' ), true ) || 0 !== validate_file( WP_DEBUG_LOG ) )
+				ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' );
+			else
+				ini_set( 'error_log', WP_DEBUG_LOG );
 		}
 	} else {
 		error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
