Fix issue #118 (manually implementing PR #1832)
diff --git a/system/core/Lang.php b/system/core/Lang.php
index 8963851..5d824ce 100644
--- a/system/core/Lang.php
+++ b/system/core/Lang.php
@@ -151,15 +151,16 @@
 	 *
 	 * Fetches a single line of text from the language array
 	 *
-	 * @param	string	$line	Language line key
+	 * @param	string	$line		Language line key
+	 * @param	bool	$log_errors	Whether to log an error message if the line is not found
 	 * @return	string	Translation
 	 */
-	public function line($line = '')
+	public function line($line = '', $log_errors = TRUE)
 	{
 		$value = ($line === '' OR ! isset($this->language[$line])) ? FALSE : $this->language[$line];
 
 		// Because killer robots like unicorns!
-		if ($value === FALSE)
+		if ($value === FALSE && $log_errors === TRUE)
 		{
 			log_message('error', 'Could not find the language line "'.$line.'"');
 		}
diff --git a/system/libraries/Unit_test.php b/system/libraries/Unit_test.php
index 842b4ae..05c7eef 100644
--- a/system/libraries/Unit_test.php
+++ b/system/libraries/Unit_test.php
@@ -284,11 +284,11 @@
 					continue;
 				}
 
-				if (FALSE !== ($line = $CI->lang->line(strtolower('ut_'.$val))))
+				if (FALSE !== ($line = $CI->lang->line(strtolower('ut_'.$val), FALSE)))
 				{
 					$val = $line;
 				}
-				$temp[$CI->lang->line('ut_'.$key)] = $val;
+				$temp[$CI->lang->line('ut_'.$key, FALSE)] = $val;
 			}
 
 			$retval[] = $temp;
diff --git a/user_guide_src/source/changelog.rst b/user_guide_src/source/changelog.rst
index e523c4c..8de9d2f 100644
--- a/user_guide_src/source/changelog.rst
+++ b/user_guide_src/source/changelog.rst
@@ -251,7 +251,9 @@
    -  :doc:`Encryption Library <libraries/encryption>` changes include:
 	 -  Added support for hashing algorithms other than SHA1 and MD5.
 	 -  Removed previously deprecated ``sha1()`` method.
-   -  Changed :doc:`Language Library <libraries/language>` method ``load()`` to filter the language name with ``ctype_digit()``.
+   -  :doc:`Language Library <libraries/language>` changes include:
+	 -  Changed method ``load()`` to filter the language name with ``ctype_digit()``.
+	 -  Added an optional second parameter to method ``line()`` to disable error login for line keys that were not found.
    -  :doc:`Profiler Library <general/profiling>` now also displays database object names.
    -  :doc:`Migration Library <libraries/migration>` changes include:
 	 -  Added support for timestamp-based migrations (enabled by default).
@@ -450,6 +452,7 @@
 -  Fixed a bug (#1978) - :doc:`Directory Helper <helpers/directory_helper>` function :php:func:`directory_map()`'s return array didn't make a distinction between directories and file indexes when a directory with a numeric name is present.
 -  Fixed a bug (#777) - :doc:`Loader Library <libraries/loader>` didn't look for helper extensions in added package paths.
 -  Fixed a bug (#18) - :doc:`APC Cache <libraries/caching>` driver didn't (un)serialize data, resulting in failure to store objects.
+-  Fixed a bug (#188) - :doc:`Unit Testing Library <libraries/unit_testing>` filled up logs with error messages for non-existing language keys.
 
 Version 2.1.3
 =============
diff --git a/user_guide_src/source/libraries/language.rst b/user_guide_src/source/libraries/language.rst
index b231f14..772f70d 100644
--- a/user_guide_src/source/libraries/language.rst
+++ b/user_guide_src/source/libraries/language.rst
@@ -66,9 +66,14 @@
 
 	$this->lang->line('language_key');
 
-Where language_key is the array key corresponding to the line you wish
+Where *language_key* is the array key corresponding to the line you wish
 to show.
 
+You can optionally pass FALSE as the second argument of that method to
+disable error logging, in case you're not sure if the line exists::
+
+	$this->lang->line('misc_key', FALSE);
+
 .. note:: This method simply returns the line. It does not echo it.
 
 Using language lines as form labels