<!--
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

https://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>
