You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ih...@apache.org on 2012/10/08 10:23:08 UTC
svn commit: r1395467 - in /logging/log4php/trunk/src: changes/changes.xml
main/php/helpers/LoggerPatternParser.php site/xdoc/docs/layouts/pattern.xml
Author: ihabunek
Date: Mon Oct 8 08:23:07 2012
New Revision: 1395467
URL: http://svn.apache.org/viewvc?rev=1395467&view=rev
Log:
LOG4PHP-163 Fixed the LoggerPatternConverter so that trimming is by default done from the right (same as in sprintf()). Improved docs.
Modified:
logging/log4php/trunk/src/changes/changes.xml
logging/log4php/trunk/src/main/php/helpers/LoggerPatternParser.php
logging/log4php/trunk/src/site/xdoc/docs/layouts/pattern.xml
Modified: logging/log4php/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4php/trunk/src/changes/changes.xml?rev=1395467&r1=1395466&r2=1395467&view=diff
==============================================================================
--- logging/log4php/trunk/src/changes/changes.xml (original)
+++ logging/log4php/trunk/src/changes/changes.xml Mon Oct 8 08:23:07 2012
@@ -21,6 +21,7 @@
</properties>
<body>
<release version="2.3.0" date="SVN">
+ <action date="2012-10-07" type="fix" issue="LOG4PHP-163" dev="Ivan Habunek" due-to="Daniel Wong" due-to-email="dan at dsmwong dot com">LoggerPatternConverter formats max incorrectly</action>
<action date="2012-10-07" type="fix" issue="LOG4PHP-188" dev="Ivan Habunek">Events logged by upstream loggers even if disabled by level.</action>
<action date="2012-10-06" type="update" issue="LOG4PHP-186" dev="Ivan Habunek" due-to="Rasmus Lerdorf" due-to-email="rasmus at lerdorf dot com">Don't clear the entire stat cache on an append.</action>
<action date="2012-10-06" type="add" issue="LOG4PHP-141" dev="Ivan Habunek">Allow setting of a default renderer.</action>
Modified: logging/log4php/trunk/src/main/php/helpers/LoggerPatternParser.php
URL: http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/helpers/LoggerPatternParser.php?rev=1395467&r1=1395466&r2=1395467&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/helpers/LoggerPatternParser.php (original)
+++ logging/log4php/trunk/src/main/php/helpers/LoggerPatternParser.php Mon Oct 8 08:23:07 2012
@@ -64,7 +64,7 @@ class LoggerPatternParser {
self::ESCAPE_CHAR . // Character which marks the start of the conversion pattern
'(?P<modifiers>[0-9.-]*)' . // Format modifiers (optional)
'(?P<word>[a-zA-Z]+)' . // The conversion word
- '(?P<option>{[^}]*})?' . // Conversion option in braces (optional)
+ '(?P<option>{[^}]*})?' . // Conversion option in braces (optional)
'/'; // Ending regex pattern delimiter
}
@@ -229,10 +229,9 @@ class LoggerPatternParser {
if (!empty($parts[1])) {
$maxPart = (integer) $parts[1];
$info->max = abs($maxPart);
- $info->trimLeft = ($maxPart > 0);
+ $info->trimLeft = ($maxPart < 0);
}
return $info;
}
}
-
Modified: logging/log4php/trunk/src/site/xdoc/docs/layouts/pattern.xml
URL: http://svn.apache.org/viewvc/logging/log4php/trunk/src/site/xdoc/docs/layouts/pattern.xml?rev=1395467&r1=1395466&r2=1395467&view=diff
==============================================================================
--- logging/log4php/trunk/src/site/xdoc/docs/layouts/pattern.xml (original)
+++ logging/log4php/trunk/src/site/xdoc/docs/layouts/pattern.xml Mon Oct 8 08:23:07 2012
@@ -56,10 +56,10 @@
<p><strong>Conversion pattern</strong> is a string which controls the formatting of logging
events. It controls how logging events will be transformed into strings by the layout.</p>
- <p>The conversion pattern is closely related to the conversion pattern of the
- <a href="http://www.cplusplus.com/reference/clibrary/cstdio/printf" class="external">printf</a>
- function in C(++). It is composed of literal text and format control expressions called <em>conversion
- specifiers</em>.</p>
+ <p>The conversion pattern is closely related to the conversion pattern of the PHP
+ <a href="http://www.php.net/manual/en/function.sprintf.php" class="external">sprintf</a> function.
+ It is composed of literal text and format control expressions called <em>conversion specifiers</em>.
+ </p>
<p>A conversion specifier begins with a percent sign (%) and is followed by a <em>conversion word</em>.
Some conversion words require one or more <em>options</em> to be given. These are specified in braces after the
@@ -218,6 +218,17 @@
</tr>
<tr>
<td>
+ <p><strong>%ex</strong></p>
+ <p><strong>%exception</strong></p>
+ <p><strong>%throwable</strong></p>
+ </td>
+ <td>
+ <p>The exception associated with the logging event, along with it's stack trace. If
+ there is no exception, evalutates to an empty string.</p>
+ </td>
+ </tr>
+ <tr>
+ <td>
<p><strong>%F</strong></p>
<p><strong>%file</strong></p>
</td>
@@ -353,25 +364,20 @@
it is possible to change the minimum and maximum width and the justifications of each data field.
</p>
- <p>All format modifiers are optional, and are placed between the percent sign and the conversion
- word.</p>
+ <p>Both format modifiers are optional, and are placed between the percent sign (%) and the conversion
+ word. These are, in order:</p>
- <p>The first format modifier is the <em>left justification flag</em> which is just the minus (-)
- character.</p>
-
- <p>Then comes the <em>>minimum field width</em> modifier. This is an integer that
- represents the minimum number of characters to output. If the data item requires fewer characters,
- it is padded on either the left or the right until the minimum width is reached. The default is to
- pad on the left (right justify) but you can specify right padding with the left justification flag.
- The padding character is space. If the data item is larger than the minimum field width, the field
- is expanded to accommodate the data. The value is never truncated. </p>
-
- <p>This behavior can be changed using the <em>maximum field width</em> modifier which is designated
- by a period (.) followed by an integer. If the data item is longer than the maximum field, then the
- extra characters are removed from the beginning of the data item and not from the end. For example,
- it the maximum field width is eight and the data item is ten characters long, then the first two
- characters of the data item are dropped. This behavior deviates from the printf function in C where
- truncation is done from the end. </p>
+ <ol>
+ <li>A <b>minimum width specifier</b>, a number which determines the minimum width of the resulting
+ string. If the resulting string is shorter that the given number, it will be padded with spaces to
+ the desired length. By default, the string is right-justified (padded from left), but adding a
+ "-" sign before the specifier will make it left-justified.</li>
+
+ <li>A <b>maximum widht specifier</b>, a dot (".") followed by a number which determines the maximum
+ allowed width of the resulting string. If the resulting string is shorter than the given number, it
+ will be truncated to the maximum width. By default the string is truncated from the right, but
+ adding a "-" sign before the specifier will cause it to truncate from the left.</li>
+ </ol>
<p>The following table demonstrates various uses of format modifiers:</p>
@@ -414,36 +420,36 @@
<tr>
<td align="center"><strong>%.30logger</strong></td>
<td align="center">none</td>
- <td align="center">left</td>
+ <td align="center">right</td>
<td align="center">none</td>
<td align="center">30</td>
- <td>Trim from the beginning if the logger name is longer than 30 characters.</td>
+ <td>Trim from the end if the logger name is longer than 30 characters.</td>
</tr>
<tr>
<td align="center"><strong>%.-30logger</strong></td>
<td align="center">none</td>
- <td align="center">right</td>
+ <td align="center">left</td>
<td align="center">none</td>
<td align="center">30</td>
- <td>Trim from the end if the logger name is longer than 30 characters.</td>
+ <td>Trim from the beginning if the logger name is longer than 30 characters.</td>
</tr>
<tr>
<td align="center"><strong>%20.30logger</strong></td>
<td align="center">right</td>
- <td align="center">left</td>
+ <td align="center">right</td>
<td align="center">20</td>
<td align="center">30</td>
<td>Left pad with spaces if the logger name is shorter than 20 characters. However, if
- the logger name is longer than 30 characters, then trim from the beginning.</td>
+ the logger name is longer than 30 characters, then trim from the end.</td>
</tr>
<tr>
<td align="center"><strong>%-20.30logger</strong></td>
<td align="center">left</td>
- <td align="center">left</td>
+ <td align="center">right</td>
<td align="center">20</td>
<td align="center">30</td>
<td>Right pad with spaces if the logger name is shorter than 20 characters. However, if the
- logger name is longer than 30 characters, then trim from the beginning.</td>
+ logger name is longer than 30 characters, then trim from the end.</td>
</tr>
</tbody>
</table>
@@ -461,24 +467,28 @@
</thead>
<tbody>
<tr>
- <td>[%10.10logger]</td>
+ <td>[%10logger]</td>
<td>Foo</td>
<td><code>[ Foo]</code></td>
+ <td>Added padding, right aligned.</td>
</tr>
<tr>
- <td>[%-10.10logger]</td>
+ <td>[%-10logger]</td>
<td>Foo</td>
<td><code>[Foo ]</code></td>
+ <td>Added padding, left aligned.</td>
</tr>
<tr>
- <td>[%10.10logger]</td>
+ <td>[%.10logger]</td>
<td>org.apache.log4php.Foo</td>
- <td><code>[og4php.Foo]</code></td>
+ <td><code>[org.apache]</code></td>
+ <td>Trimmed from right.</td>
</tr>
<tr>
- <td>[%10.-10logger]</td>
+ <td>[%.-10logger]</td>
<td>org.apache.log4php.Foo</td>
- <td><code>[org.apache]</code></td>
+ <td><code>[og4php.Foo]</code></td>
+ <td>Trimmed from left.</td>
</tr>
</tbody>
</table>
@@ -594,7 +604,51 @@ $logger->warn("Sed sit amet ipsum mauris
2012-01-02T14:19:33+01:00 [22924] From:194.152.205.71:11257 Request:[foo=bar] Message: Sed sit amet ipsum mauris.
</pre>
- <p><code>%server{REMOTE_ADDR}</code> is equivalent to PHP code <code>$_SERVER['REMOTE_ADDR']</code>.</p>
+ <p><code>%server{REMOTE_ADDR}</code> is equivalent to PHP code <code>$_SERVER['REMOTE_ADDR']</code>.</p>
+
+ <h4>Logging exceptions</h4>
+
+ <p>If you wish to log any exception passed to the logging methods, you should add the <code>%ex</code>
+ specifier to the end of your conversion pattern, after <code>%newline</code>. This way, if an exception
+ is loggerd it will be addded to your log below your message.</p>
+
+ <p>For example: <code>%date %logger %message%newline%ex</code></p>
+
+ <p>In the following code, suppose that the work() method can throw an exception. This wolud be a good
+ way to deal with it:</p>
+
+<pre class="prettyprint linenums">
+$log = Logger::getLogger('foo');
+$log->info("Let's try this");
+
+try
+{
+ $foo = new Foo();
+ $foo->work(123);
+}
+catch(Exception $ex)
+{
+ // Exception is passed as the second parameter
+ $log->error("That didn't work", $ex);
+}
+$log->info("Done.");
+</pre>
+
+ <p>If work() throws an exception, your log might look something like this:</p>
+
+<pre>
+2012-10-08T10:11:18+02:00 foo Let's try this
+2012-10-08T10:11:18+02:00 foo That didn't work
+exception 'Exception' with message 'Doesn't work' in D:\work\exceptions.php:38
+Stack trace:
+#0 D:\work\exceptions.php(29): Bar->work(123)
+#1 D:\work\exceptions.php(48): Foo->work(123)
+#2 {main}
+2012-10-08T10:11:18+02:00 foo Done.
+</pre>
+
+ <p>The exception, along with the full stack trace ends up in your log. This also works with nested
+ exceptions, the full stack trace is added.</p>
</subsection>
</section>
</body>