<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <base href="http://jira.qos.ch" /> 
        <title>Message Title</title> 
    </head> 
    <body class="jira" style="color: #333; font-family: Arial, sans-serif; font-size: 14px; line-height: 1.429"> 
        <table id="background-table" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: #f5f5f5; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
            <!-- header here --> 
            <tr> 
                <td id="header-pattern-container" style="padding: 0px; border-collapse: collapse; padding: 10px 20px"> 
                    <table id="header-pattern" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                        <tr> 
                            <td id="header-avatar-image-container" valign="top" style="padding: 0px; border-collapse: collapse; vertical-align: top; width: 32px; padding-right: 8px"> <img id="header-avatar-image" class="image_fix" src="cid:jira-generated-image-avatar-745ba3b8-0e9d-48fc-a042-a00c69fecd89" height="32" width="32" border="0" style="border-radius: 3px; vertical-align: top" /> 
                            </td> 
                            <td id="header-text-container" valign="middle" style="padding: 0px; border-collapse: collapse; vertical-align: middle; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> <a class="user-hover" rel="forsel" id="email_forsel" href="http://jira.qos.ch/secure/ViewProfile.jspa?name=forsel" style="color:#3b73af;; color: #3b73af; text-decoration: none">Frans Orsel</a> <strong>commented</strong> on <a href="http://jira.qos.ch/browse/LOGBACK-1002" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-static-improvement-46bbc9cb-a09d-4506-b30e-7c9b0e51bde5" height="16" width="16" border="0" align="absmiddle" alt="Improvement" /> LOGBACK-1002</a> 
                            </td> 
                        </tr> 
                    </table> 
                </td> 
            </tr> 
            <tr> 
                <td id="email-content-container" style="padding: 0px; border-collapse: collapse; padding: 0 20px"> 
                    <table id="email-content-table" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-spacing: 0; border-collapse: separate"> 
                        <tr> 
                            <!-- there needs to be content in the cell for it to render in some clients --> 
                            <td class="email-content-rounded-top mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; padding: 0 15px 0 16px; height: 15px; background-color: #fff; border-left: 1px solid #ccc; border-top: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom: 0; border-top-right-radius: 5px; border-top-left-radius: 5px; height: 10px; line-height: 10px; padding: 0 15px 0 16px; mso-line-height-rule: exactly">
                                 
                            </td> 
                        </tr> 
                        <tr> 
                            <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff"> 
                                <table class="page-title-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                    <tr> 
                                        <td style="vertical-align: top;; padding: 0px; border-collapse: collapse; padding-right: 5px; font-size: 20px; line-height: 30px; mso-line-height-rule: exactly" class="page-title-pattern-header-container"> <span class="page-title-pattern-header" style="font-family: Arial, sans-serif; padding: 0; font-size: 20px; line-height: 30px; mso-text-raise: 2px; mso-line-height-rule: exactly; vertical-align: middle"> <a href="http://jira.qos.ch/browse/LOGBACK-1002" style="color: #3b73af; text-decoration: none">Re: include() for groovy configurations</a> </span> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <tr> 
                            <td id="text-paragraph-pattern-top" class="email-content-main mobile-expand  comment-top-pattern" style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff; border-bottom: none; padding-bottom: 0"> 
                                <table class="text-paragraph-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 2px"> 
                                    <tr> 
                                        <td class="text-paragraph-pattern-container mobile-resize-text " style="padding: 0px; border-collapse: collapse; padding: 0 0 10px 0"> 
                                            <p style="margin: 10px 0 0 0">I have created an alternative implementation for the logback.groovy/Gaffer include() support in pull request <a href="https://github.com/qos-ch/logback/pull/298" class="external-link" rel="nofollow" style="color: #3b73af; text-decoration: none">https://github.com/qos-ch/logback/pull/298</a>. I need include() support for my project and tried out the original proposed implementation. Although the original implementation seems very short and probably elegant in a 'Groovy' way (I'm new to Groovy, but a closure seems neat), I found that it had some shortcomings. Biggest issue was that included files were not scanned for changes. Also, the proposed implementation does not really try to follow the approach that was taken in the logback.xml (Joran) implementation. In my opinion, both Joran and Gaffer configuration should look very similar and it should be attempted to support the same featureset (except for the obvious added Groovy power), so that it is easy to move from one configuration to the other configuration.</p> 
                                            <p style="margin: 10px 0 0 0">I made the following update:</p> 
                                            <ul> 
                                                <li>
                                                    include method is added to ConfigurationDelegate, like all other DSL methods
                                                </li> 
                                                <li>
                                                    include method supports File, URL (including resource URL) and String, where the latter is attempted to be resolved as URL, resource or File (in that order)
                                                </li> 
                                                <li>
                                                    include method support optional flag to supress warning in case file to include cannot be found
                                                </li> 
                                                <li>
                                                    logging is similar to that of Joran xml configuration, e.g. check for existing file/URL is done and warning is logged (if optional=false)
                                                </li> 
                                                <li>
                                                    script parsing is done by GroovyConfigurator as before, so that 1 GroovyShell and 1 Binding is used for all scripts
                                                </li> 
                                                <li>
                                                    by using 1 Binding, undeclared variables in the binding can be shared between scripts
                                                </li> 
                                                <li>
                                                    in order to have script classes named after the script name, script parsing is done based on a URL instead of the direct script text
                                                </li> 
                                                <li>
                                                    to have a simple, consistent implementation, logback.groovy itself is also parsed as a URL, the resulting class is no longer named Script1, but 'logback' after the filename
                                                </li> 
                                                <li>
                                                    above 2 steps needed some changes in GroovyConfigurator, where the run(dslText) method was removed in favour of the run(url) method (direct script text seemed to be only used in 2 unit tests)
                                                </li> 
                                                <li>
                                                    the calling script class is accessible to the include script via a getParent method (parent field in ConfigurationDelegate)
                                                </li> 
                                                <li>
                                                    the called/included script class is accessible to the calling script as a return value from the include method
                                                </li> 
                                                <li>
                                                    12 unit tests have been added, as much as possible similar to the extensive tests that were already present for Joran
                                                </li> 
                                                <li>
                                                    extensive description for include method has been added to Chapter 12 of the manual, including a few extra example files under logback-examples
                                                </li> 
                                                <li>
                                                    small unrelated update: groovy.transform.Field has been added to the ImportCustomizer, so that it is possible to create script class fields without needing to import this annotation (see also <a href="http://jira.qos.ch/browse/LOGBACK-1118" title="logback.groovy/Gaffer variable scope is broken" class="issue-link" data-issue-key="LOGBACK-1118" style="color: #3b73af; text-decoration: none">LOGBACK-1118</a>)
                                                </li> 
                                                <li>
                                                    small unrelated documentation update: add groovy.transform.Field to the list in the documentation
                                                </li> 
                                            </ul> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <tr> 
                            <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff"> 
                                <table id="actions-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> 
                                    <tr> 
                                        <td id="actions-pattern-container" valign="middle" style="padding: 0px; border-collapse: collapse; padding: 10px 0 10px 24px; vertical-align: middle; padding-left: 0"> 
                                            <table align="left" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                                <tr> 
                                                    <td class="actions-pattern-action-icon-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0px; vertical-align: middle"> <a href="http://jira.qos.ch/browse/LOGBACK-1002#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none"> <img class="actions-pattern-action-icon-image" src="cid:jira-generated-image-static-comment-icon-8ce99857-f635-4ef3-b8e5-cb3f2980e5b1" alt="Add Comment" title="Add Comment" height="16" width="16" border="0" style="vertical-align: middle" /> </a> 
                                                    </td> 
                                                    <td class="actions-pattern-action-text-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px"> <a href="http://jira.qos.ch/browse/LOGBACK-1002#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none">Add Comment</a> 
                                                    </td> 
                                                </tr> 
                                            </table> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <!-- there needs to be content in the cell for it to render in some clients --> 
                        <tr> 
                            <td class="email-content-rounded-bottom mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; padding: 0 15px 0 16px; height: 5px; line-height: 5px; background-color: #fff; border-top: 0; border-left: 1px solid #ccc; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; mso-line-height-rule: exactly">
                                 
                            </td> 
                        </tr> 
                    </table> 
                </td> 
            </tr> 
            <tr> 
                <td id="footer-pattern" style="padding: 0px; border-collapse: collapse; padding: 12px 20px"> 
                    <table id="footer-pattern-container" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                        <tr> 
                            <td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0px; border-collapse: collapse; color: #999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px">
                                 This message was sent by Atlassian JIRA <span id="footer-build-information">(v6.4.12#64027-<span title="e3691cc1283c0f3cef6d65d3ea82d47743692b57" data-commit-id="e3691cc1283c0f3cef6d65d3ea82d47743692b57}">sha1:e3691cc</span>)</span> 
                            </td> 
                            <td id="footer-pattern-logo-desktop-container" valign="top" style="padding: 0px; border-collapse: collapse; padding-left: 20px; vertical-align: top"> 
                                <table style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                    <tr> 
                                        <td id="footer-pattern-logo-desktop-padding" style="padding: 0px; border-collapse: collapse; padding-top: 3px"> <img id="footer-pattern-logo-desktop" src="cid:jira-generated-image-static-footer-desktop-logo-3b319175-6fbf-4073-a4e5-dfd1f55134f2" alt="Atlassian logo" title="Atlassian logo" width="169" height="36" class="image_fix" /> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                    </table> 
                </td> 
            </tr> 
        </table>   
    </body>
</html>