<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<html>
  <head>
    <meta http-equiv="Content-Language" content="en-us"></meta>
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>LogContent resource</title>
  </head>

  <body>
    <h2><a name="antunit">LogContent</a></h2>

    <h3>Description</h3>

    <p>Provides access to output logged by <a href="antunit.html">AntUnit</a>
      in terms of Ant's Resource framework. As is the case with
      <a href="assertions.html#assertLogContains">assertLogContains</a> and
     <a href="assertions.html#assertLogDoesntContain">assertLogDoesntContain</a>,
      &lt;logcontent&gt; is only available when executed from &lt;antunit&gt;.
    </p>

    <h3>Parameters</h3>
    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">level</td>
        <td valign="top">The maximum log level to retrieve
          (&quot;err&quot;/&quot;warn&quot;/&quot;info&quot;/&quot;verbose&quot;/&quot;debug&quot;).
          Defaults to &quot;info&quot;.</td>
        <td align="center">No.</td>
      </tr>
      <tr>
        <td valign="top">mergeLines</td>
        <td valign="top">Whether to merge messages into a single line
          or split them into multiple lines.  <em>since AntUnit
          1.3</em></td>
        <td valign="top" align="center">No, defaults
          to <code>true</code></td>
      </tr>
    </table>
  </body>
</html>
