Details

    • Type: Bug Bug
    • Status: Closed
    • Resolution: Fixed
    • Affects Version/s: 6.0.2 RC, 6.0.11 EE, 6.1.0 CE RC1
    • Fix Version/s: 6.0.12 EE, 6.1.0 CE RC1
    • Component/s: UI Infrastructure
    • Labels:
      None
    • Environment:
      6.0, at revision: 51611
    • Liferay Contributor's Agreement:
      Accept
    • Similar Issues:
      Show 5 results 

      Description

      The deploy process added log4j.jar for any plugins. This will cause errors in tomcat like following.

      log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "org.apache.log4j.Appender" variable.
      log4j:ERROR The class "org.apache.log4j.Appender" was loaded by
      log4j:ERROR [WebappClassLoader
      delegate: false
      repositories:
      /WEB-INF/classes/
      ----------> Parent Classloader:
      org.apache.catalina.loader.StandardClassLoader@1ac1fe4
      ] whereas object of type
      log4j:ERROR "org.apache.log4j.ConsoleAppender" was loaded by [WebappClassLoader
      delegate: false
      repositories:
      /WEB-INF/classes/
      ----------> Parent Classloader:
      org.apache.catalina.loader.StandardClassLoader@1ac1fe4
      ].
      log4j:ERROR Could not instantiate appender named "CONSOLE".

      How to fix it? change the deployment process.

        Activity

        Hide
        Jonas Yuan added a comment -

        How to fix it?

        when a plugin got hot deployed in LR, the following three files are added:

        $

        {tomcat.as}\webapps\solr-web\WEB-INF\classes\log4j.properties
        ${tomcat.as}

        \webapps\solr-web\WEB-INF\classes\logging.properties
        $

        {tomcat.as}

        \webapps\solr-web\WEB-INF\lib\log4j.jar

        Since the portlets and Liferay core use two different classloaders (WebappClassLoader and StandardClassLoader) and that is why you saw the error message.

        To fix this one temporarily, delete the above files from plugin after it is deployed, clean the cache, and restart Tomcat.

        A better fix would be: change hot-deployment process.

        Show
        Jonas Yuan added a comment - How to fix it? when a plugin got hot deployed in LR, the following three files are added: $ {tomcat.as}\webapps\solr-web\WEB-INF\classes\log4j.properties ${tomcat.as} \webapps\solr-web\WEB-INF\classes\logging.properties $ {tomcat.as} \webapps\solr-web\WEB-INF\lib\log4j.jar Since the portlets and Liferay core use two different classloaders (WebappClassLoader and StandardClassLoader) and that is why you saw the error message. To fix this one temporarily, delete the above files from plugin after it is deployed, clean the cache, and restart Tomcat. A better fix would be: change hot-deployment process.
        Hide
        Jonas Yuan added a comment -

        Add log4j.xml to fix this issue.

        <?xml version="1.0"?>
        <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

        <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
        <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d

        {ABSOLUTE}

        %-5p [%c

        {1}

        :%L] %m%n" />
        </layout>
        </appender>

        <category name="knowledge-base-portlet.docroot.knowledge_base.view.jsp">
        <priority value="ERROR" />
        </category>

        <root>
        <priority value="INFO" />
        <appender-ref ref="CONSOLE" />
        </root>
        </log4j:configuration>

        Show
        Jonas Yuan added a comment - Add log4j.xml to fix this issue. <?xml version="1.0"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d {ABSOLUTE} %-5p [%c {1} :%L] %m%n" /> </layout> </appender> <category name="knowledge-base-portlet.docroot.knowledge_base.view.jsp"> <priority value="ERROR" /> </category> <root> <priority value="INFO" /> <appender-ref ref="CONSOLE" /> </root> </log4j:configuration>
        Hide
        Andrius Kurtinaitis added a comment -

        Please reopen this issue. It is in any way not resolved.
        You only suggested a workaround, not a solution.
        The deployment process (or classloader hierarchy) still do not work correctly.

        Show
        Andrius Kurtinaitis added a comment - Please reopen this issue. It is in any way not resolved. You only suggested a workaround, not a solution. The deployment process (or classloader hierarchy) still do not work correctly.
        Hide
        Andrius Kurtinaitis added a comment -

        For me, this workaround does not make much difference, just another class (XML configuration related) cannot be instantiated:

        log4j:ERROR A "org.apache.log4j.xml.DOMConfigurator" object is not assignable to a "org.apache.log4j.spi.Configurator" variable.
        log4j:ERROR The class "org.apache.log4j.spi.Configurator" was loaded by
        log4j:ERROR [WebappClassLoader
        delegate: false
        repositories:
        /WEB-INF/classes/
        ----------> Parent Classloader:
        org.apache.catalina.loader.StandardClassLoader@1d85f79
        ] whereas object of type
        log4j:ERROR "org.apache.log4j.xml.DOMConfigurator" was loaded by [WebappClassLoader
        delegate: false
        repositories:
        /WEB-INF/classes/
        ----------> Parent Classloader:
        org.apache.catalina.loader.StandardClassLoader@1d85f79
        ].
        log4j:ERROR Could not instantiate configurator [org.apache.log4j.xml.DOMConfigurator].

        Show
        Andrius Kurtinaitis added a comment - For me, this workaround does not make much difference, just another class (XML configuration related) cannot be instantiated: log4j:ERROR A "org.apache.log4j.xml.DOMConfigurator" object is not assignable to a "org.apache.log4j.spi.Configurator" variable. log4j:ERROR The class "org.apache.log4j.spi.Configurator" was loaded by log4j:ERROR [WebappClassLoader delegate: false repositories: /WEB-INF/classes/ ----------> Parent Classloader: org.apache.catalina.loader.StandardClassLoader@1d85f79 ] whereas object of type log4j:ERROR "org.apache.log4j.xml.DOMConfigurator" was loaded by [WebappClassLoader delegate: false repositories: /WEB-INF/classes/ ----------> Parent Classloader: org.apache.catalina.loader.StandardClassLoader@1d85f79 ]. log4j:ERROR Could not instantiate configurator [org.apache.log4j.xml.DOMConfigurator] .
        Hide
        Jonas Yuan added a comment -

        Thanks,

        This ticket should be reopen.

        Show
        Jonas Yuan added a comment - Thanks, This ticket should be reopen.
        Hide
        Dave Weitzel added a comment -

        I am seeing this as well.
        I have two portlet projects that are set up in very similar manner with:

        private static Log _log = LogFactory.getLog(<name of class>.class);

        one works fine when I call the log:

        _log.error(message);

        it appears in the console anyway. the other using identical code generates:
        log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "org.apache.log4j.Appender" variable.
        log4j:ERROR The class "org.apache.log4j.Appender" was loaded by
        log4j:ERROR [WebappClassLoader
        delegate: false
        repositories:
        /WEB-INF/classes/
        ----------> Parent Classloader:
        org.apache.catalina.loader.StandardClassLoader@1c9b9ca
        ] whereas object of type
        log4j:ERROR "org.apache.log4j.ConsoleAppender" was loaded by [WebappClassLoader
        delegate: false
        repositories:
        /WEB-INF/classes/
        ----------> Parent Classloader:
        org.apache.catalina.loader.StandardClassLoader@1c9b9ca
        ].
        log4j:ERROR Could not instantiate appender named "CONSOLE".

        both have the properties files mentioned above and the log4j and commons-logging jar files in the <portlet>/WEB-INF/lib directory

        Jonas - your xml file should be put where?

        Show
        Dave Weitzel added a comment - I am seeing this as well. I have two portlet projects that are set up in very similar manner with: private static Log _log = LogFactory.getLog(<name of class>.class); one works fine when I call the log: _log.error(message); it appears in the console anyway. the other using identical code generates: log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "org.apache.log4j.Appender" variable. log4j:ERROR The class "org.apache.log4j.Appender" was loaded by log4j:ERROR [WebappClassLoader delegate: false repositories: /WEB-INF/classes/ ----------> Parent Classloader: org.apache.catalina.loader.StandardClassLoader@1c9b9ca ] whereas object of type log4j:ERROR "org.apache.log4j.ConsoleAppender" was loaded by [WebappClassLoader delegate: false repositories: /WEB-INF/classes/ ----------> Parent Classloader: org.apache.catalina.loader.StandardClassLoader@1c9b9ca ]. log4j:ERROR Could not instantiate appender named "CONSOLE". both have the properties files mentioned above and the log4j and commons-logging jar files in the <portlet>/WEB-INF/lib directory Jonas - your xml file should be put where?
        Hide
        Chris Whittle added a comment -

        I'm having this issue in 5.2 SP5 as well

        Show
        Chris Whittle added a comment - I'm having this issue in 5.2 SP5 as well
        Hide
        Alberto Gallardo added a comment -

        I still don't get what is the difference between having a log4j.properties or a log4j.xml? (Only the second one is a work-around.)

        The issue is also reproducible with my setup:

        GlassFish Server Open Source Edition 3.0.1 (build 22)
        Liferay Portal Community Edition 6.0.5 CE (Bunyan / Build 6005 / August 16, 2010)

        Show
        Alberto Gallardo added a comment - I still don't get what is the difference between having a log4j.properties or a log4j.xml? (Only the second one is a work-around.) The issue is also reproducible with my setup: GlassFish Server Open Source Edition 3.0.1 (build 22) Liferay Portal Community Edition 6.0.5 CE (Bunyan / Build 6005 / August 16, 2010)
        Hide
        Juan Fernández added a comment -

        Reproducible on Liferay 6.0.11 (Liferay 6.0EE SP1)

        Show
        Juan Fernández added a comment - Reproducible on Liferay 6.0.11 (Liferay 6.0EE SP1)
        Hide
        Mykola Makhin added a comment -

        Reproduced on 6.0.6 CE.

        In my case, the problem occurred once I started to use ServiceBuilder services and added Log4J Logger to one of my <...>LocalServiceImpl classes. Once I removed Log4J logging from there everything got back to norm - exception disappeared.

        (I made service methods throw exceptions, and was catching them in a code not related to ServiceBuilder read/generated classes, but it could also be done by changing Log4J logger calls to Liferay's LogUtil calls).

        Show
        Mykola Makhin added a comment - Reproduced on 6.0.6 CE. In my case, the problem occurred once I started to use ServiceBuilder services and added Log4J Logger to one of my <...>LocalServiceImpl classes. Once I removed Log4J logging from there everything got back to norm - exception disappeared. (I made service methods throw exceptions, and was catching them in a code not related to ServiceBuilder read/generated classes, but it could also be done by changing Log4J logger calls to Liferay's LogUtil calls).
        Hide
        T Chaudhry added a comment -

        My setup is as follows:
        Glassfish server 3.1
        Liferay 6.0.5

        I deployed my-portlet.war file to liferay by copying it to Glassfish/deploy folder. The war file contains the log4j.properties file in WEB-INF/classes folder. The first time when Glassfish is already running, my-portlet war file deploys successfully and logs are correctly generated. If I stop and restart Glassfish, I run into the same error:

        log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "org.apache.log4j.Appender" variable.
        log4j:ERROR The class "org.apache.log4j.Appender" was loaded by .....

        1. Workaround 1
        I tried adding log4j.xml file as described by Jonas Yuan on /May/10 5:37 PM to the WEB-INF/classes folder but that just led to another log class instantiation error:

        log4j:ERROR A "org.apache.log4j.xml.DOMConfigurator" object is not assignable to a "org.apache.log4j.spi.Configurator" variable.
        log4j:ERROR The class "org.apache.log4j.spi.Configurator" was loaded by .....

        2. Workaround 2
        I need my log4j.properties file in WEB-INF/classes directory of my-portlet.war file. But if I delete the log4j.jar file from the WEB-INF/lib folder and the logging.properties file from WEB-INF/classes folder, then I run into NoClassDefFoundError:

        ERROR [HotDeployUtil:112] com.liferay.portal.kernel.deploy.hot.HotDeployException: Error registering portlets for my-portlet
        com.liferay.portal.kernel.deploy.hot.HotDeployException: Error registering portlets for my-portlet
        at com.liferay.portal.kernel.deploy.hot.BaseHotDeployListener.throwHotDeployException(BaseHotDeployListener.java:45)
        ....
        Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Logger
        ....

        Is there a fix or a proper workaround to this issue?

        thanks,
        TC

        Show
        T Chaudhry added a comment - My setup is as follows: Glassfish server 3.1 Liferay 6.0.5 I deployed my-portlet.war file to liferay by copying it to Glassfish/deploy folder. The war file contains the log4j.properties file in WEB-INF/classes folder. The first time when Glassfish is already running, my-portlet war file deploys successfully and logs are correctly generated. If I stop and restart Glassfish, I run into the same error: log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "org.apache.log4j.Appender" variable. log4j:ERROR The class "org.apache.log4j.Appender" was loaded by ..... 1. Workaround 1 I tried adding log4j.xml file as described by Jonas Yuan on /May/10 5:37 PM to the WEB-INF/classes folder but that just led to another log class instantiation error: log4j:ERROR A "org.apache.log4j.xml.DOMConfigurator" object is not assignable to a "org.apache.log4j.spi.Configurator" variable. log4j:ERROR The class "org.apache.log4j.spi.Configurator" was loaded by ..... 2. Workaround 2 I need my log4j.properties file in WEB-INF/classes directory of my-portlet.war file. But if I delete the log4j.jar file from the WEB-INF/lib folder and the logging.properties file from WEB-INF/classes folder, then I run into NoClassDefFoundError: ERROR [HotDeployUtil:112] com.liferay.portal.kernel.deploy.hot.HotDeployException: Error registering portlets for my-portlet com.liferay.portal.kernel.deploy.hot.HotDeployException: Error registering portlets for my-portlet at com.liferay.portal.kernel.deploy.hot.BaseHotDeployListener.throwHotDeployException(BaseHotDeployListener.java:45) .... Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Logger .... Is there a fix or a proper workaround to this issue? thanks, TC
        Hide
        Brian Chan added a comment -

        Added properties so you can configure this behavior.

        #

        1. Set this to true if plugins should automatically copy Commons Logging.
          #
          auto.deploy.copy.commons.logging=true

        #

        1. Set this to true if plugins should automatically copy Log4j.
          #
          auto.deploy.copy.log4j=true

        Defaulting to old behavior since I don't think too many ppl have this issue.

        Show
        Brian Chan added a comment - Added properties so you can configure this behavior. # Set this to true if plugins should automatically copy Commons Logging. # auto.deploy.copy.commons.logging=true # Set this to true if plugins should automatically copy Log4j. # auto.deploy.copy.log4j=true Defaulting to old behavior since I don't think too many ppl have this issue.
        Hide
        T Chaudhry added a comment -

        Where are these properties set?

        Also, can I continue to use Liferay 6.0.5 or would I have to download another version/patch where I can apply these properties.

        thanks!

        Show
        T Chaudhry added a comment - Where are these properties set? Also, can I continue to use Liferay 6.0.5 or would I have to download another version/patch where I can apply these properties. thanks!
        Hide
        T Chaudhry added a comment -

        I assumed these properties would need to be set in portal-ext.properties file.

        Even after I set these properties, I can see that commons-logging and log4j are still copied to my web application's WEB_INF/lib folder?

        Do I need another version/patch to my existing 6.0.5 Liferay?

        thanks,
        TC

        Show
        T Chaudhry added a comment - I assumed these properties would need to be set in portal-ext.properties file. Even after I set these properties, I can see that commons-logging and log4j are still copied to my web application's WEB_INF/lib folder? Do I need another version/patch to my existing 6.0.5 Liferay? thanks, TC
        Hide
        Mika Koivisto added a comment -

        This was fixed for 6.0 Enterprise Edition and upcoming 6.1 Community Edition.

        Show
        Mika Koivisto added a comment - This was fixed for 6.0 Enterprise Edition and upcoming 6.1 Community Edition.
        Hide
        T Chaudhry added a comment -

        Thanks.

        Have there been other changes included in the EE or CE to fix this issue?

        I don't see how simply not adding the log4j and commons-logging jar files to my web app's WEB-INF/lib folder will fix this issue. As I previously stated, when those jars are not present and I start my Glassfish server, I see a NoClassDefFoundError.

        Show
        T Chaudhry added a comment - Thanks. Have there been other changes included in the EE or CE to fix this issue? I don't see how simply not adding the log4j and commons-logging jar files to my web app's WEB-INF/lib folder will fix this issue. As I previously stated, when those jars are not present and I start my Glassfish server, I see a NoClassDefFoundError.
        Hide
        T Chaudhry added a comment -

        Just so that you are clear, my problem is intermittent, sort of.

        When I have a clean Glassfish/Liferay without my web application portlet, everything seems to be fine. Then I drop my portlet web application under Glassfish/deploy folder and it gets auto deployed. Logging works fine and my app log files are correctly generated. Now when I stop and start glassfish a number of times (anywhere between 1 to 5), at some point in time, logging fails. The message that I see in glassfish's server.log file is:

        [#|2011-06-16T13:49:25.071-0400|WARNING|sun-appserver2.1|javax.enterprise.system.stream.err|_ThreadID=15;_ThreadName=pool-1-thread-1;_RequestID=a8bc2c92-236d-4108-93da-1179908be7e2;|log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "org.apache.log4j.Appender" variable.|#]

        [#|2011-06-16T13:49:25.077-0400|WARNING|sun-appserver2.1|javax.enterprise.system.stream.err|_ThreadID=15;_ThreadName=pool-1-thread-1;_RequestID=a8bc2c92-236d-4108-93da-1179908be7e2;|
        log4j:ERROR The class "org.apache.log4j.Appender" was loaded by |#]

        [#|2011-06-16T13:49:25.077-0400|WARNING|sun-appserver2.1|javax.enterprise.system.stream.err|_ThreadID=15;_ThreadName=pool-1-thread-1;_RequestID=a8bc2c92-236d-4108-93da-1179908be7e2;|
        log4j:ERROR [WebappClassLoader
        delegate: true
        repositories:
        /WEB-INF/classes/
        ----------> Parent Classloader:
        EJBClassLoader :
        urlSet = []
        doneCalled = false
        Parent -> java.net.URLClassLoader@cb42cf

        ] whereas object of type |#]

        After this error appears, no matter how many times I restart Glassfish, the error always shows up at start up. Also, my web app's log files are no longer generated! The only workaround that works for me is to undeploy my web app, clean up glassfish directories, restart glassfish and redeploy my web app.

        As you can imagine, this is not much of a workaround since doing this in production env, (power failure, system reboot, etc) will be extremely painful.

        My web application contains a log4j.properties file in the WEB-INF/classes folder. Neither log4j or commons-logging are packaged in the WEB-INF/lib directory. When my web app gets deployed, I can see that LifeRay does indeed add those jars files to the web apps's lib directory. If I try to delete these jars and restart glassfish, I get a NoClassDefFoundError

        ERROR [HotDeployUtil:112] com.liferay.portal.kernel.deploy.hot.HotDeployException: Error registering portlets for my-portlet
        com.liferay.portal.kernel.deploy.hot.HotDeployException: Error registering portlets for my-portlet
        at com.liferay.portal.kernel.deploy.hot.BaseHotDeployListener.throwHotDeployException(BaseHotDeployListener.java:45)
        ....
        Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Logger

        I'm trying to understand what kinda fix I can expect with Liferay 6.0 EE or 6.1 CE.

        My env is:
        Glassfish server 3.1
        Liferay 6.0.5
        Windows 7

        Our web app which is soon to be deployed to production will run on Unix platform.

        Thanks for your help.

        Show
        T Chaudhry added a comment - Just so that you are clear, my problem is intermittent, sort of. When I have a clean Glassfish/Liferay without my web application portlet, everything seems to be fine. Then I drop my portlet web application under Glassfish/deploy folder and it gets auto deployed. Logging works fine and my app log files are correctly generated. Now when I stop and start glassfish a number of times (anywhere between 1 to 5), at some point in time, logging fails. The message that I see in glassfish's server.log file is: [#|2011-06-16T13:49:25.071-0400|WARNING|sun-appserver2.1|javax.enterprise.system.stream.err|_ThreadID=15;_ThreadName=pool-1-thread-1;_RequestID=a8bc2c92-236d-4108-93da-1179908be7e2;|log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "org.apache.log4j.Appender" variable.|#] [#|2011-06-16T13:49:25.077-0400|WARNING|sun-appserver2.1|javax.enterprise.system.stream.err|_ThreadID=15;_ThreadName=pool-1-thread-1;_RequestID=a8bc2c92-236d-4108-93da-1179908be7e2;| log4j:ERROR The class "org.apache.log4j.Appender" was loaded by |#] [#|2011-06-16T13:49:25.077-0400|WARNING|sun-appserver2.1|javax.enterprise.system.stream.err|_ThreadID=15;_ThreadName=pool-1-thread-1;_RequestID=a8bc2c92-236d-4108-93da-1179908be7e2;| log4j:ERROR [WebappClassLoader delegate: true repositories: /WEB-INF/classes/ ----------> Parent Classloader: EJBClassLoader : urlSet = [] doneCalled = false Parent -> java.net.URLClassLoader@cb42cf ] whereas object of type |#] After this error appears, no matter how many times I restart Glassfish, the error always shows up at start up. Also, my web app's log files are no longer generated! The only workaround that works for me is to undeploy my web app, clean up glassfish directories, restart glassfish and redeploy my web app. As you can imagine, this is not much of a workaround since doing this in production env, (power failure, system reboot, etc) will be extremely painful. My web application contains a log4j.properties file in the WEB-INF/classes folder. Neither log4j or commons-logging are packaged in the WEB-INF/lib directory. When my web app gets deployed, I can see that LifeRay does indeed add those jars files to the web apps's lib directory. If I try to delete these jars and restart glassfish, I get a NoClassDefFoundError ERROR [HotDeployUtil:112] com.liferay.portal.kernel.deploy.hot.HotDeployException: Error registering portlets for my-portlet com.liferay.portal.kernel.deploy.hot.HotDeployException: Error registering portlets for my-portlet at com.liferay.portal.kernel.deploy.hot.BaseHotDeployListener.throwHotDeployException(BaseHotDeployListener.java:45) .... Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Logger I'm trying to understand what kinda fix I can expect with Liferay 6.0 EE or 6.1 CE. My env is: Glassfish server 3.1 Liferay 6.0.5 Windows 7 Our web app which is soon to be deployed to production will run on Unix platform. Thanks for your help.
        Hide
        T Chaudhry added a comment -

        Adding system property -Dlog4j.ignoreTCL=true and adding log4j and commons-logging to WEB-INF/lib folder of the app war file seemed to do the trick. I no longer see class x is not assignable to class y type errors and also, my app log files are correctly generated.

        Show
        T Chaudhry added a comment - Adding system property -Dlog4j.ignoreTCL=true and adding log4j and commons-logging to WEB-INF/lib folder of the app war file seemed to do the trick. I no longer see class x is not assignable to class y type errors and also, my app log files are correctly generated.
        Hide
        Massimiliano Assante added a comment -

        I Can confirm that Adding system property -Dlog4j.ignoreTCL=true and adding log4j and commons-logging to WEB-INF/lib folder of the app war file solved the problem on LR 6.0.6 CE

        Show
        Massimiliano Assante added a comment - I Can confirm that Adding system property -Dlog4j.ignoreTCL=true and adding log4j and commons-logging to WEB-INF/lib folder of the app war file solved the problem on LR 6.0.6 CE

          People

          • Votes:
            6 Vote for this issue
            Watchers:
            14 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:
              Days since last comment:
              3 years, 5 days ago

              Development

                Structure Helper Panel