sml-log4r 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/doc/content/contact.html +22 -0
 - data/doc/content/contribute.html +21 -0
 - data/doc/content/index.html +90 -0
 - data/doc/content/license.html +56 -0
 - data/doc/content/manual.html +449 -0
 - data/doc/dev/README.developers +40 -0
 - data/doc/dev/checklist +14 -0
 - data/doc/dev/things-to-do +2 -0
 - data/doc/images/crush/logo2.png +0 -0
 - data/doc/images/log4r-logo.png +0 -0
 - data/doc/images/logo2.png +0 -0
 - data/doc/log4r.css +111 -0
 - data/doc/old/manual.html +348 -0
 - data/doc/templates/main.html +147 -0
 - data/examples/README +19 -0
 - data/examples/customlevels.rb +34 -0
 - data/examples/fileroll.rb +40 -0
 - data/examples/log4r_yaml.yaml +0 -0
 - data/examples/logclient.rb +25 -0
 - data/examples/logserver.rb +18 -0
 - data/examples/moderate.xml +29 -0
 - data/examples/moderateconfig.rb +66 -0
 - data/examples/myformatter.rb +23 -0
 - data/examples/outofthebox.rb +21 -0
 - data/examples/rrconfig.xml +63 -0
 - data/examples/rrsetup.rb +42 -0
 - data/examples/simpleconfig.rb +39 -0
 - data/examples/xmlconfig.rb +25 -0
 - data/examples/yaml.rb +30 -0
 - data/src/log4r.rb +17 -0
 - data/src/log4r/base.rb +74 -0
 - data/src/log4r/config.rb +9 -0
 - data/src/log4r/configurator.rb +224 -0
 - data/src/log4r/formatter/formatter.rb +105 -0
 - data/src/log4r/formatter/patternformatter.rb +108 -0
 - data/src/log4r/lib/drbloader.rb +52 -0
 - data/src/log4r/lib/xmlloader.rb +24 -0
 - data/src/log4r/logevent.rb +28 -0
 - data/src/log4r/logger.rb +194 -0
 - data/src/log4r/loggerfactory.rb +89 -0
 - data/src/log4r/logserver.rb +28 -0
 - data/src/log4r/outputter/consoleoutputters.rb +18 -0
 - data/src/log4r/outputter/datefileoutputter.rb +110 -0
 - data/src/log4r/outputter/emailoutputter.rb +115 -0
 - data/src/log4r/outputter/fileoutputter.rb +49 -0
 - data/src/log4r/outputter/iooutputter.rb +55 -0
 - data/src/log4r/outputter/outputter.rb +132 -0
 - data/src/log4r/outputter/outputterfactory.rb +59 -0
 - data/src/log4r/outputter/remoteoutputter.rb +40 -0
 - data/src/log4r/outputter/rollingfileoutputter.rb +126 -0
 - data/src/log4r/outputter/staticoutputter.rb +30 -0
 - data/src/log4r/outputter/syslogoutputter.rb +75 -0
 - data/src/log4r/rdoc/configurator +243 -0
 - data/src/log4r/rdoc/emailoutputter +103 -0
 - data/src/log4r/rdoc/formatter +39 -0
 - data/src/log4r/rdoc/log4r +89 -0
 - data/src/log4r/rdoc/logger +175 -0
 - data/src/log4r/rdoc/logserver +85 -0
 - data/src/log4r/rdoc/outputter +108 -0
 - data/src/log4r/rdoc/patternformatter +128 -0
 - data/src/log4r/rdoc/syslogoutputter +29 -0
 - data/src/log4r/rdoc/yamlconfigurator +20 -0
 - data/src/log4r/repository.rb +65 -0
 - data/src/log4r/staticlogger.rb +49 -0
 - data/src/log4r/yamlconfigurator.rb +0 -0
 - data/tests/include.rb +7 -0
 - data/tests/runtest.rb +6 -0
 - data/tests/testbase.rb +45 -0
 - data/tests/testcustom.rb +33 -0
 - data/tests/testdefault.rb +25 -0
 - data/tests/testformatter.rb +29 -0
 - data/tests/testlogger.rb +198 -0
 - data/tests/testoutputter.rb +112 -0
 - data/tests/testpatternformatter.rb +26 -0
 - data/tests/testxmlconf.rb +51 -0
 - data/tests/xml/testconf.xml +37 -0
 - metadata +140 -0
 
| 
         @@ -0,0 +1,147 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <html>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <head>
         
     | 
| 
      
 3 
     | 
    
         
            +
              <!-- TITLE -->
         
     | 
| 
      
 4 
     | 
    
         
            +
              <link rel="stylesheet" type="text/css" href="log4r.css">
         
     | 
| 
      
 5 
     | 
    
         
            +
            </head>
         
     | 
| 
      
 6 
     | 
    
         
            +
            <body>
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            <div align="right"><img src="images/log4r-logo.png"/></div>
         
     | 
| 
      
 9 
     | 
    
         
            +
            <hr noshade>
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            <table border="0" cellspacing="3" cellpadding="0" width="100%"> 
         
     | 
| 
      
 12 
     | 
    
         
            +
            <tr>
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            <!-- Sidebar -->
         
     | 
| 
      
 15 
     | 
    
         
            +
            <td width="15%" valign="top">
         
     | 
| 
      
 16 
     | 
    
         
            +
            <table cellspacing="0" cellpadding="0" width=100%" nowrap="true">
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            <!-- Log4r Box -->
         
     | 
| 
      
 19 
     | 
    
         
            +
            <tr><td >
         
     | 
| 
      
 20 
     | 
    
         
            +
            <table width="100%" cellspacing="0" cellpadding="0" align="center" >
         
     | 
| 
      
 21 
     | 
    
         
            +
            <tr><td width="100%" class="menutitle">Log4r</td></tr>
         
     | 
| 
      
 22 
     | 
    
         
            +
            <tr><td width="100%" class="menubuff"> </td></tr>
         
     | 
| 
      
 23 
     | 
    
         
            +
            <!-- list -->
         
     | 
| 
      
 24 
     | 
    
         
            +
            <table class="menu"  cellspacing="3" cellpadding="0" width="100%"
         
     | 
| 
      
 25 
     | 
    
         
            +
                   align="center">
         
     | 
| 
      
 26 
     | 
    
         
            +
            <tr><td ><a href="index.html">Home Page</a></tr></td>
         
     | 
| 
      
 27 
     | 
    
         
            +
            <tr><td><a href="http://sourceforge.net/project/showfiles.php?group_id=43396">
         
     | 
| 
      
 28 
     | 
    
         
            +
            Download</a></td></tr>
         
     | 
| 
      
 29 
     | 
    
         
            +
            <tr><td nowrap="true">
         
     | 
| 
      
 30 
     | 
    
         
            +
            <a href="http://sourceforge.net/projects/log4r/">@ SourceForge</a>
         
     | 
| 
      
 31 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 32 
     | 
    
         
            +
            <tr><td>
         
     | 
| 
      
 33 
     | 
    
         
            +
            <a href="license.html">License</a>
         
     | 
| 
      
 34 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 35 
     | 
    
         
            +
            <tr><td>
         
     | 
| 
      
 36 
     | 
    
         
            +
            <a href="contact.html">Contact</a>
         
     | 
| 
      
 37 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 38 
     | 
    
         
            +
            </table>
         
     | 
| 
      
 39 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            <tr><td height=15> </td></tr>
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            <!-- Doc Box -->
         
     | 
| 
      
 44 
     | 
    
         
            +
            <tr><td >
         
     | 
| 
      
 45 
     | 
    
         
            +
            <table cellspacing="0" cellpadding="0" align="center" width="100%">
         
     | 
| 
      
 46 
     | 
    
         
            +
            <tr><td width="100%"  class="menutitle">Documents</td></tr>
         
     | 
| 
      
 47 
     | 
    
         
            +
            <tr><td  width="100%" class="menubuff"> </td></tr>
         
     | 
| 
      
 48 
     | 
    
         
            +
            <!-- list -->
         
     | 
| 
      
 49 
     | 
    
         
            +
            <table class="menu"  cellspacing="3" cellpadding="0" width="100%"
         
     | 
| 
      
 50 
     | 
    
         
            +
                   align="center">
         
     | 
| 
      
 51 
     | 
    
         
            +
            <tr><td>
         
     | 
| 
      
 52 
     | 
    
         
            +
                <a href="manual.html">#{version} Manual</a>
         
     | 
| 
      
 53 
     | 
    
         
            +
            </tr></tr>
         
     | 
| 
      
 54 
     | 
    
         
            +
            <tr><td>
         
     | 
| 
      
 55 
     | 
    
         
            +
                <a href="rdoc/index.html">#{version} RDoc API</a>
         
     | 
| 
      
 56 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            </table>
         
     | 
| 
      
 59 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            <tr><td height=15> </td></tr>
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            <!-- Development Box -->
         
     | 
| 
      
 64 
     | 
    
         
            +
            <tr><td >
         
     | 
| 
      
 65 
     | 
    
         
            +
            <table cellspacing="0" cellpadding="0" align="center" width="100%">
         
     | 
| 
      
 66 
     | 
    
         
            +
            <tr><td width="100%"  class="menutitle">Development</td></tr>
         
     | 
| 
      
 67 
     | 
    
         
            +
            <tr><td  width="100%" class="menubuff"> </td></tr>
         
     | 
| 
      
 68 
     | 
    
         
            +
            <!-- list -->
         
     | 
| 
      
 69 
     | 
    
         
            +
            <table class="menu"  cellspacing="3" cellpadding="0" width="100%"
         
     | 
| 
      
 70 
     | 
    
         
            +
                   align="center">
         
     | 
| 
      
 71 
     | 
    
         
            +
            <tr><td>
         
     | 
| 
      
 72 
     | 
    
         
            +
            <a
         
     | 
| 
      
 73 
     | 
    
         
            +
            href="http://sourceforge.net/tracker/?atid=436181&group_id=43396&func=browse">
         
     | 
| 
      
 74 
     | 
    
         
            +
            Bugs</a>
         
     | 
| 
      
 75 
     | 
    
         
            +
            </tr></tr>
         
     | 
| 
      
 76 
     | 
    
         
            +
            <tr><td>
         
     | 
| 
      
 77 
     | 
    
         
            +
            <a
         
     | 
| 
      
 78 
     | 
    
         
            +
            href="http://sourceforge.net/tracker/?atid=436184&group_id=43396&func=browse">
         
     | 
| 
      
 79 
     | 
    
         
            +
            Requests</a>
         
     | 
| 
      
 80 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 81 
     | 
    
         
            +
            <tr><td>
         
     | 
| 
      
 82 
     | 
    
         
            +
            <a href="contribute.html">Contribute</a>
         
     | 
| 
      
 83 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            </table>
         
     | 
| 
      
 86 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
            <tr><td height=15> </td></tr>
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
            <!-- Link Box -->
         
     | 
| 
      
 92 
     | 
    
         
            +
            <tr><td >
         
     | 
| 
      
 93 
     | 
    
         
            +
            <table cellspacing="0" cellpadding="0" align="center" width="100%">
         
     | 
| 
      
 94 
     | 
    
         
            +
            <tr><td width="100%"  class="menutitle">Links</td></tr>
         
     | 
| 
      
 95 
     | 
    
         
            +
            <tr><td  width="100%" class="menubuff"> </td></tr>
         
     | 
| 
      
 96 
     | 
    
         
            +
            <!-- list -->
         
     | 
| 
      
 97 
     | 
    
         
            +
            <table class="menu"  cellspacing="3" cellpadding="0" width="100%"
         
     | 
| 
      
 98 
     | 
    
         
            +
                   align="center">
         
     | 
| 
      
 99 
     | 
    
         
            +
            <tr><td>
         
     | 
| 
      
 100 
     | 
    
         
            +
            <a href="http://www.ruby-lang.org/en/index.html">Ruby</a>
         
     | 
| 
      
 101 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 102 
     | 
    
         
            +
            <tr><td>
         
     | 
| 
      
 103 
     | 
    
         
            +
            <a href="http://jakarta.apache.org/log4j/docs/index.html">Apache Log4j</a>
         
     | 
| 
      
 104 
     | 
    
         
            +
            </tr></tr>
         
     | 
| 
      
 105 
     | 
    
         
            +
            <tr><td>
         
     | 
| 
      
 106 
     | 
    
         
            +
            <a href="http://www.ruby-lang.org/en/raa-list.rhtml?name=REXML">REXML</a>
         
     | 
| 
      
 107 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 108 
     | 
    
         
            +
            <tr><td>
         
     | 
| 
      
 109 
     | 
    
         
            +
            <a href="http://rm-f.net/~cout/ruby/romp/">ROMP</a>
         
     | 
| 
      
 110 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 111 
     | 
    
         
            +
            <tr><td height="5"> </td></tr>
         
     | 
| 
      
 112 
     | 
    
         
            +
            <tr><td align="center">
         
     | 
| 
      
 113 
     | 
    
         
            +
            <a href="http://sourceforge.net">
         
     | 
| 
      
 114 
     | 
    
         
            +
            <img
         
     | 
| 
      
 115 
     | 
    
         
            +
            src="http://sourceforge.net/sflogo.php?group_id=43396" width="88" height="31"
         
     | 
| 
      
 116 
     | 
    
         
            +
            border="0" alt="SourceForge Logo"></a>
         
     | 
| 
      
 117 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
            </table>
         
     | 
| 
      
 120 
     | 
    
         
            +
            </td></tr>
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
            </table>
         
     | 
| 
      
 123 
     | 
    
         
            +
            </td>
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
            <!-- Main column -->
         
     | 
| 
      
 126 
     | 
    
         
            +
            <td width="85%" align="left" valign="top">
         
     | 
| 
      
 127 
     | 
    
         
            +
            <center>
         
     | 
| 
      
 128 
     | 
    
         
            +
            <table cellspacing="0" cellpadding="0" align="center" width="95%">
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
            <!-- CONTENT -->
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
            </table>
         
     | 
| 
      
 133 
     | 
    
         
            +
            </center>
         
     | 
| 
      
 134 
     | 
    
         
            +
            </td>
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
            </tr>
         
     | 
| 
      
 138 
     | 
    
         
            +
            </table>
         
     | 
| 
      
 139 
     | 
    
         
            +
            <hr noshade>
         
     | 
| 
      
 140 
     | 
    
         
            +
            <div align="right">
         
     | 
| 
      
 141 
     | 
    
         
            +
            <font color="#888888" size="-1">
         
     | 
| 
      
 142 
     | 
    
         
            +
            <i>
         
     | 
| 
      
 143 
     | 
    
         
            +
            <!-- CVSID -->
         
     | 
| 
      
 144 
     | 
    
         
            +
            </i></font>
         
     | 
| 
      
 145 
     | 
    
         
            +
            </div>
         
     | 
| 
      
 146 
     | 
    
         
            +
            </body>
         
     | 
| 
      
 147 
     | 
    
         
            +
            </html>
         
     | 
    
        data/examples/README
    ADDED
    
    | 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            The examples are:
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            1. outofthebox.rb                 - How to get started with minimal setup
         
     | 
| 
      
 4 
     | 
    
         
            +
            2. simpleconfig.rb                - Using Log4r casually
         
     | 
| 
      
 5 
     | 
    
         
            +
            3. moderateconfig.rb              - A more sophisticated config
         
     | 
| 
      
 6 
     | 
    
         
            +
            4. xmlconfig.rb and moderate.xml  - XML configuration example based on #3
         
     | 
| 
      
 7 
     | 
    
         
            +
            5. rrsetup.rb and rrconfig.xml    - A real example (or used to be ;-)
         
     | 
| 
      
 8 
     | 
    
         
            +
            6. logserver.rb and logclient.rb  - Remote logging example
         
     | 
| 
      
 9 
     | 
    
         
            +
            7. fileroll.rb                    - Using RollingFileOutputter
         
     | 
| 
      
 10 
     | 
    
         
            +
            8. yaml.rb and log4r_yaml.yaml    - YAML configuration example
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            The output will go to screen and to files in the directory logs/.
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            Note to RubyGems users: The syntax to require log4r as a gem is as follows:
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              require 'rubygems'
         
     | 
| 
      
 17 
     | 
    
         
            +
              require_gem 'log4r'
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            Obviously, the examples will need to be modified to follow this.
         
     | 
| 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Suppose we don't like having 5 levels named DEBUG, INFO, etc.
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Suppose we'd rather use 3 levels named Foo, Bar, and Baz.
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Log4r allows you to rename the levels and their corresponding methods
         
     | 
| 
      
 4 
     | 
    
         
            +
            # in a painless way. This file provides and example
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            $: << '../src'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require 'log4r'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'log4r/configurator'
         
     | 
| 
      
 10 
     | 
    
         
            +
            include Log4r
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            # This is how we specify our levels
         
     | 
| 
      
 13 
     | 
    
         
            +
            Configurator.custom_levels "Foo", "Bar", "Baz"
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            l = Logger.new('custom levels')
         
     | 
| 
      
 16 
     | 
    
         
            +
            l.add StdoutOutputter.new('console')
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            l.level = Foo
         
     | 
| 
      
 19 
     | 
    
         
            +
            puts l.foo?
         
     | 
| 
      
 20 
     | 
    
         
            +
            l.foo "This is foo"
         
     | 
| 
      
 21 
     | 
    
         
            +
            puts l.bar?
         
     | 
| 
      
 22 
     | 
    
         
            +
            l.bar "this is bar"
         
     | 
| 
      
 23 
     | 
    
         
            +
            puts l.baz?
         
     | 
| 
      
 24 
     | 
    
         
            +
            l.baz "this is baz"
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            puts "Now change to Baz"
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            l.level = Baz
         
     | 
| 
      
 29 
     | 
    
         
            +
            puts l.foo?
         
     | 
| 
      
 30 
     | 
    
         
            +
            l.foo {"This is foo"}
         
     | 
| 
      
 31 
     | 
    
         
            +
            puts l.bar?
         
     | 
| 
      
 32 
     | 
    
         
            +
            l.bar {"this is bar"}
         
     | 
| 
      
 33 
     | 
    
         
            +
            puts l.baz?
         
     | 
| 
      
 34 
     | 
    
         
            +
            l.baz {"this is baz"}
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # How to use RollingFileOutputter
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            $: << "../src"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'log4r'
         
     | 
| 
      
 5 
     | 
    
         
            +
            include Log4r
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            puts "this will take a while"
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            # example of log file being split by time constraint 'maxtime'
         
     | 
| 
      
 10 
     | 
    
         
            +
            config = {
         
     | 
| 
      
 11 
     | 
    
         
            +
              "filename" => "logs/TestTime.log",
         
     | 
| 
      
 12 
     | 
    
         
            +
              "maxtime" => 10,
         
     | 
| 
      
 13 
     | 
    
         
            +
              "trunc" => true
         
     | 
| 
      
 14 
     | 
    
         
            +
            }
         
     | 
| 
      
 15 
     | 
    
         
            +
            timeLog = Logger.new 'WbExplorer'
         
     | 
| 
      
 16 
     | 
    
         
            +
            timeLog.outputters = RollingFileOutputter.new("WbExplorer", config)
         
     | 
| 
      
 17 
     | 
    
         
            +
            timeLog.level = DEBUG
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            # log something once a second for 100 seconds
         
     | 
| 
      
 20 
     | 
    
         
            +
            100.times { |t|
         
     | 
| 
      
 21 
     | 
    
         
            +
              timeLog.info "blah #{t}"
         
     | 
| 
      
 22 
     | 
    
         
            +
              sleep(1.0)
         
     | 
| 
      
 23 
     | 
    
         
            +
            }
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            # example of log file being split by space constraint 'maxsize'
         
     | 
| 
      
 26 
     | 
    
         
            +
            config = {
         
     | 
| 
      
 27 
     | 
    
         
            +
              "filename" => "logs/TestSize.log",
         
     | 
| 
      
 28 
     | 
    
         
            +
              "maxsize" => 16000,
         
     | 
| 
      
 29 
     | 
    
         
            +
              "trunc" => true
         
     | 
| 
      
 30 
     | 
    
         
            +
            }
         
     | 
| 
      
 31 
     | 
    
         
            +
            sizeLog = Logger.new 'WbExplorer'
         
     | 
| 
      
 32 
     | 
    
         
            +
            sizeLog.outputters = RollingFileOutputter.new("WbExplorer", config)
         
     | 
| 
      
 33 
     | 
    
         
            +
            sizeLog.level = DEBUG
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            # log a large number of times
         
     | 
| 
      
 36 
     | 
    
         
            +
            100000.times { |t|
         
     | 
| 
      
 37 
     | 
    
         
            +
              sizeLog.info "blah #{t}"
         
     | 
| 
      
 38 
     | 
    
         
            +
            }
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            puts "done! check the two sets of log files in logs/ (TestTime and TestSize)"
         
     | 
| 
         Binary file 
     | 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # How to use RemoteOutputter. See logserver.rb first.
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            $: << File.join('..','src')
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'log4r'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'log4r/outputter/remoteoutputter'
         
     | 
| 
      
 6 
     | 
    
         
            +
            include Log4r
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            Logger.new('log4r').add 'stdout'        # to see what's going on inside
         
     | 
| 
      
 9 
     | 
    
         
            +
            RemoteOutputter.new 'remote',           # make a RemoteOutputter
         
     | 
| 
      
 10 
     | 
    
         
            +
                :uri=>'tcpromp://localhost:9999',   # where our LogServer is
         
     | 
| 
      
 11 
     | 
    
         
            +
                :buffsize=>10                       # buffer 10 before sending to LogServer
         
     | 
| 
      
 12 
     | 
    
         
            +
            Logger.new('client').add('remote')      # give 'remote' to a 'client' Logger
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            # we're done with setup, now let's log
         
     | 
| 
      
 15 
     | 
    
         
            +
            def log(l)
         
     | 
| 
      
 16 
     | 
    
         
            +
              l.debug "debugging"
         
     | 
| 
      
 17 
     | 
    
         
            +
              l.info "a piece of info"
         
     | 
| 
      
 18 
     | 
    
         
            +
              l.warn "Danger, Will Robinson, danger!"
         
     | 
| 
      
 19 
     | 
    
         
            +
              l.error "I dropped by Wookie! :("
         
     | 
| 
      
 20 
     | 
    
         
            +
              l.fatal "kaboom!"
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            5.times { log(Logger['client']) }      # do a bunch of logging
         
     | 
| 
      
 24 
     | 
    
         
            +
            Logger['client'].info "Bye Bye from client!"
         
     | 
| 
      
 25 
     | 
    
         
            +
            Outputter['remote'].flush              # flush the RemoteOutputter
         
     | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # How to use LogServer
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            $: << File.join('..','src')
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'log4r'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'log4r/configurator'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            # XML configuration is simple enough to embed here
         
     | 
| 
      
 8 
     | 
    
         
            +
            xml = %(
         
     | 
| 
      
 9 
     | 
    
         
            +
            <log4r_config>
         
     | 
| 
      
 10 
     | 
    
         
            +
              <logserver name="server" uri="tcpromp://localhost:9999">
         
     | 
| 
      
 11 
     | 
    
         
            +
               <outputter>stdout</outputter>
         
     | 
| 
      
 12 
     | 
    
         
            +
              </logserver>
         
     | 
| 
      
 13 
     | 
    
         
            +
            </log4r_config>
         
     | 
| 
      
 14 
     | 
    
         
            +
            )
         
     | 
| 
      
 15 
     | 
    
         
            +
            Log4r::Logger.new('log4r').add 'stdout'        # to see what's going on inside
         
     | 
| 
      
 16 
     | 
    
         
            +
            Log4r::Configurator.load_xml_string xml        # load it up
         
     | 
| 
      
 17 
     | 
    
         
            +
            sleep                                   
         
     | 
| 
      
 18 
     | 
    
         
            +
            # now run logclient.rb on another terminal
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <!-- the config file used by xmlconfig.rb -->
         
     | 
| 
      
 2 
     | 
    
         
            +
            <log4r_config>
         
     | 
| 
      
 3 
     | 
    
         
            +
              <pre_config>
         
     | 
| 
      
 4 
     | 
    
         
            +
                <global level="DEBUG"/>
         
     | 
| 
      
 5 
     | 
    
         
            +
                <!-- we'll set serverlog in XML and logpath at runtime for illustration -->
         
     | 
| 
      
 6 
     | 
    
         
            +
                <parameter name="serverlog" value="./logs/server.log"/>
         
     | 
| 
      
 7 
     | 
    
         
            +
              </pre_config>
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              <!-- outputters, illustrating XML config flexibility -->
         
     | 
| 
      
 10 
     | 
    
         
            +
              <outputter type="FileOutputter" name="server">
         
     | 
| 
      
 11 
     | 
    
         
            +
                <filename>#{serverlog}</filename>
         
     | 
| 
      
 12 
     | 
    
         
            +
                <trunc>false</trunc>
         
     | 
| 
      
 13 
     | 
    
         
            +
              </outputter>
         
     | 
| 
      
 14 
     | 
    
         
            +
              <outputter type="FileOutputter" name="client" 
         
     | 
| 
      
 15 
     | 
    
         
            +
                         filename="#{logpath}/client.log"/>
         
     | 
| 
      
 16 
     | 
    
         
            +
              <outputter type="FileOutputter" name="gui" 
         
     | 
| 
      
 17 
     | 
    
         
            +
                         filename="#{logpath}/guidebug.log"/>
         
     | 
| 
      
 18 
     | 
    
         
            +
              <outputter type="StderrOutputter" name="console" level="ERROR"/>
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              <!-- loggers -->
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              <logger name="server" level="ERROR" outputters="server, console"/>
         
     | 
| 
      
 23 
     | 
    
         
            +
              <logger name="client" level="INFO"  outputters="client, console"/>
         
     | 
| 
      
 24 
     | 
    
         
            +
              <logger name="client::gui" trace="true">
         
     | 
| 
      
 25 
     | 
    
         
            +
                <level>DEBUG</level>
         
     | 
| 
      
 26 
     | 
    
         
            +
                <outputter>gui</outputter>
         
     | 
| 
      
 27 
     | 
    
         
            +
              </logger>
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            </log4r_config> 
         
     | 
| 
         @@ -0,0 +1,66 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Now, for something more complicted
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Let's pretend this is the global config file for our app
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            $: << File.join('..','src')
         
     | 
| 
      
 5 
     | 
    
         
            +
            require "log4r"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            include Log4r                   # include Log4r to make things simple
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            Logger.root.level = DEBUG       # global level DEBUG
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            # suppose we want to have loggers for a Server and a Client class
         
     | 
| 
      
 12 
     | 
    
         
            +
            # furthermore, we want the client gui to have its own logger. (You'll want
         
     | 
| 
      
 13 
     | 
    
         
            +
            # one logger per class or so.)
         
     | 
| 
      
 14 
     | 
    
         
            +
            # When the loggers are created, they are stored in a repository for further
         
     | 
| 
      
 15 
     | 
    
         
            +
            # retreival at any point using a hash method call: Logger['name']
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            # server is stable, so only log ERROR and FATAL
         
     | 
| 
      
 18 
     | 
    
         
            +
            Logger.new("server", ERROR)
         
     | 
| 
      
 19 
     | 
    
         
            +
            # let's say we don't need the DEBUG junk for client logs
         
     | 
| 
      
 20 
     | 
    
         
            +
            Logger.new("client", INFO)
         
     | 
| 
      
 21 
     | 
    
         
            +
            # but we're still debugging the gui
         
     | 
| 
      
 22 
     | 
    
         
            +
            debugger = Logger.new("client::gui", DEBUG)
         
     | 
| 
      
 23 
     | 
    
         
            +
            debugger.trace = true     # we want to see where the log method was called
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            # Guilog is a child of client. In this case, any log events to the gui
         
     | 
| 
      
 26 
     | 
    
         
            +
            # logger will also be logged to the client outputters. We can change
         
     | 
| 
      
 27 
     | 
    
         
            +
            # that behavior by setting guilogger's 'additive' to false, but not yet.
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            # let's create the outputters
         
     | 
| 
      
 30 
     | 
    
         
            +
            FileOutputter.new('server', :filename=>'logs/server.log', :trunc => false)
         
     | 
| 
      
 31 
     | 
    
         
            +
            FileOutputter.new('client', :filename=>'logs/client.log')
         
     | 
| 
      
 32 
     | 
    
         
            +
            FileOutputter.new('gui', :filename=>'logs/guidebug.log')
         
     | 
| 
      
 33 
     | 
    
         
            +
            # additionally, we want ERROR and FATAL messages to go to stderr
         
     | 
| 
      
 34 
     | 
    
         
            +
            StderrOutputter.new('console', :level=>ERROR)
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            # add the outputters
         
     | 
| 
      
 37 
     | 
    
         
            +
            Logger['server'].add 'server', 'console'
         
     | 
| 
      
 38 
     | 
    
         
            +
            Logger['client'].add 'client', 'console'
         
     | 
| 
      
 39 
     | 
    
         
            +
            Logger['client::gui'].add 'gui'  # gui will also write to client's outputters
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            # That's it for config. Now let's use the loggers:
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            def do_logging(log)
         
     | 
| 
      
 44 
     | 
    
         
            +
              log.debug "debugging"
         
     | 
| 
      
 45 
     | 
    
         
            +
              log.info "a piece of info"
         
     | 
| 
      
 46 
     | 
    
         
            +
              log.warn "Danger, Will Robinson, danger!"
         
     | 
| 
      
 47 
     | 
    
         
            +
              log.error "I dropped my Wookie! :(" 
         
     | 
| 
      
 48 
     | 
    
         
            +
              log.fatal "kaboom!"
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            Logger.each_logger{|logger| do_logging(logger) }
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
            # You can dynamically change levels and turn off tracing:
         
     | 
| 
      
 54 
     | 
    
         
            +
            Logger['client'].level = OFF
         
     | 
| 
      
 55 
     | 
    
         
            +
            Logger['client::gui'].trace = false
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            puts 'Only server should show Dynamic Change onscreen:'
         
     | 
| 
      
 58 
     | 
    
         
            +
            Logger.each_logger{|logger| logger.fatal "Dynamic change." }
         
     | 
| 
      
 59 
     | 
    
         
            +
            # logs/client.log file should not show "Dynamic change."
         
     | 
| 
      
 60 
     | 
    
         
            +
            # logs/guidebug.log should not show the trace at "Dynamic change."
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
            # we can also set our outputter to log only specified levels:
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            Outputter['console'].only_at ERROR
         
     | 
| 
      
 65 
     | 
    
         
            +
            puts "Should only see ERROR next:"
         
     | 
| 
      
 66 
     | 
    
         
            +
            do_logging Logger['server']
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # try out a custom formatter
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            $: << '../src'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require "log4r"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            class MyFormatter <  Log4r::Formatter
         
     | 
| 
      
 8 
     | 
    
         
            +
              def format(event)
         
     | 
| 
      
 9 
     | 
    
         
            +
                buff = "The level is #{event.level} and has "
         
     | 
| 
      
 10 
     | 
    
         
            +
                buff += "name '#{Log4r::LNAMES[event.level]}'\n"
         
     | 
| 
      
 11 
     | 
    
         
            +
                buff += "The logger is '#{event.name}' "
         
     | 
| 
      
 12 
     | 
    
         
            +
                buff += "and the data type is #{event.data.class}\n"
         
     | 
| 
      
 13 
     | 
    
         
            +
                buff += "Let's inspect the data:\n"
         
     | 
| 
      
 14 
     | 
    
         
            +
                buff += event.data.inspect + "\n"
         
     | 
| 
      
 15 
     | 
    
         
            +
                buff += "We were called at #{event.tracer[0]}\n\n"
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            log = Log4r::Logger.new('custom formatter')
         
     | 
| 
      
 20 
     | 
    
         
            +
            log.trace = true
         
     | 
| 
      
 21 
     | 
    
         
            +
            log.add Log4r::StdoutOutputter.new('stdout', :formatter=>MyFormatter)
         
     | 
| 
      
 22 
     | 
    
         
            +
            log.info [1, 2, 3, 4]
         
     | 
| 
      
 23 
     | 
    
         
            +
            log.error "A log statement"
         
     | 
| 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Here's how to start using log4r right away
         
     | 
| 
      
 2 
     | 
    
         
            +
            $: << File.join('..','src')                   # path if log4r not installed
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "log4r"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Log = Log4r::Logger.new("outofthebox")        # create a logger
         
     | 
| 
      
 6 
     | 
    
         
            +
            Log.add Log4r::Outputter.stderr               # which logs to stdout
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            # do some logging
         
     | 
| 
      
 9 
     | 
    
         
            +
            def do_logging
         
     | 
| 
      
 10 
     | 
    
         
            +
             Log.debug "debugging"
         
     | 
| 
      
 11 
     | 
    
         
            +
             Log.info "a piece of info"
         
     | 
| 
      
 12 
     | 
    
         
            +
             Log.warn "Danger, Will Robinson, danger!"
         
     | 
| 
      
 13 
     | 
    
         
            +
             Log.error "I dropped my Wookie! :("
         
     | 
| 
      
 14 
     | 
    
         
            +
             Log.fatal "kaboom!"
         
     | 
| 
      
 15 
     | 
    
         
            +
            end
         
     | 
| 
      
 16 
     | 
    
         
            +
            do_logging
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            # now let's filter anything below WARN level (DEBUG and INFO)
         
     | 
| 
      
 19 
     | 
    
         
            +
            puts "-= Changing level to WARN =-"
         
     | 
| 
      
 20 
     | 
    
         
            +
            Log.level = Log4r::WARN
         
     | 
| 
      
 21 
     | 
    
         
            +
            do_logging
         
     | 
| 
         @@ -0,0 +1,63 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <!-- This is a real config file used by a game that I'm working on 
         
     | 
| 
      
 2 
     | 
    
         
            +
                 The Ruby file that loads this is rrsetup.rb -->
         
     | 
| 
      
 3 
     | 
    
         
            +
            <log4r_config>
         
     | 
| 
      
 4 
     | 
    
         
            +
              <pre_config>
         
     | 
| 
      
 5 
     | 
    
         
            +
                <!-- I like having a ton of levels. There are three extra for component
         
     | 
| 
      
 6 
     | 
    
         
            +
                     data, comp1..3 and one level for object dumps (DATA) -->
         
     | 
| 
      
 7 
     | 
    
         
            +
                <custom_levels>
         
     | 
| 
      
 8 
     | 
    
         
            +
                  COMP3, COMP2, COMP1, DATA, DEBUG, INFO, WARN, ERROR, FATAL
         
     | 
| 
      
 9 
     | 
    
         
            +
                </custom_levels>
         
     | 
| 
      
 10 
     | 
    
         
            +
                <!-- change to ERROR when the game goes to production -->
         
     | 
| 
      
 11 
     | 
    
         
            +
                <global level="ALL"/>
         
     | 
| 
      
 12 
     | 
    
         
            +
              </pre_config>
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              <!-- Outputters -->
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              <!-- game.log records DEBUG and higher, so no game component data -->
         
     | 
| 
      
 17 
     | 
    
         
            +
              <outputter name="gameout" type="FileOutputter" level="DEBUG">
         
     | 
| 
      
 18 
     | 
    
         
            +
                <!-- I set the logpath from within the game. -->
         
     | 
| 
      
 19 
     | 
    
         
            +
                <filename>#{logpath}/game.log</filename>
         
     | 
| 
      
 20 
     | 
    
         
            +
              </outputter>
         
     | 
| 
      
 21 
     | 
    
         
            +
              <!-- DATA level goes to its own special file. These log events are
         
     | 
| 
      
 22 
     | 
    
         
            +
                   too noisy for game.log and are not game components. Useful
         
     | 
| 
      
 23 
     | 
    
         
            +
                   for dumping lots of objects during development. -->
         
     | 
| 
      
 24 
     | 
    
         
            +
              <outputter name="gamedata" type="FileOutputter" only_at="DATA">
         
     | 
| 
      
 25 
     | 
    
         
            +
                <filename>#{logpath}/data.log</filename>
         
     | 
| 
      
 26 
     | 
    
         
            +
                <!-- low-noise custom formatter for objects -->
         
     | 
| 
      
 27 
     | 
    
         
            +
                <formatter type="CompFormatter"/>
         
     | 
| 
      
 28 
     | 
    
         
            +
              </outputter>
         
     | 
| 
      
 29 
     | 
    
         
            +
              <!-- Spit any errors to the console. They merit special attention -->
         
     | 
| 
      
 30 
     | 
    
         
            +
              <outputter name="console" type="StderrOutputter" level="ERROR"/>
         
     | 
| 
      
 31 
     | 
    
         
            +
              <!-- A separate log file for tracking game components, 
         
     | 
| 
      
 32 
     | 
    
         
            +
                   used for development. It logs ALL-->
         
     | 
| 
      
 33 
     | 
    
         
            +
              <outputter name="componentout" type="FileOutputter">
         
     | 
| 
      
 34 
     | 
    
         
            +
                <filename>#{logpath}/component.log</filename>
         
     | 
| 
      
 35 
     | 
    
         
            +
                <formatter type="CompFormatter"/>
         
     | 
| 
      
 36 
     | 
    
         
            +
              </outputter>
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              <!-- Loggers -->
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              <!-- 'game' is the main logger for the client-server framework -->
         
     | 
| 
      
 41 
     | 
    
         
            +
              <logger name="game" level="DATA" additive="false" trace="true">
         
     | 
| 
      
 42 
     | 
    
         
            +
                <outputters>gameout, gamedata, console</outputters>
         
     | 
| 
      
 43 
     | 
    
         
            +
              </logger>
         
     | 
| 
      
 44 
     | 
    
         
            +
              <!-- Notice how we have fine control over how each element logs.
         
     | 
| 
      
 45 
     | 
    
         
            +
                   The gui and controller are stable while the rest are being debugged. -->
         
     | 
| 
      
 46 
     | 
    
         
            +
              <logger name="game::gui" level="ERROR" additive="true" trace="true"/>
         
     | 
| 
      
 47 
     | 
    
         
            +
              <logger name="game::boardgui" level="DEBUG" additive="true" trace="false"/>
         
     | 
| 
      
 48 
     | 
    
         
            +
              <logger name="game::server" level="DEBUG" additive="true" trace="true"/>
         
     | 
| 
      
 49 
     | 
    
         
            +
              <logger name="game::client" level="DEBUG" additive="true" trace="true"/>
         
     | 
| 
      
 50 
     | 
    
         
            +
              <logger name="game::controller" level="ERROR" additive="true" trace="false"/>
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
              <!-- 'component' is the main logger for game objects. It's used in
         
     | 
| 
      
 53 
     | 
    
         
            +
                   development to track how the objects change with time. -->
         
     | 
| 
      
 54 
     | 
    
         
            +
              <logger name="component" level="ALL" additive="false" trace="false">
         
     | 
| 
      
 55 
     | 
    
         
            +
                <outputter>componentout</outputter>
         
     | 
| 
      
 56 
     | 
    
         
            +
                <outputter>console</outputter>
         
     | 
| 
      
 57 
     | 
    
         
            +
              </logger>
         
     | 
| 
      
 58 
     | 
    
         
            +
              <logger name="component::board"/>
         
     | 
| 
      
 59 
     | 
    
         
            +
              <logger name="component::tile"/>
         
     | 
| 
      
 60 
     | 
    
         
            +
              <logger name="component::player"/>
         
     | 
| 
      
 61 
     | 
    
         
            +
              <logger name="component::player::robot"/>
         
     | 
| 
      
 62 
     | 
    
         
            +
             
         
     | 
| 
      
 63 
     | 
    
         
            +
            </log4r_config>
         
     |