Log4j 2
  1. Log4j 2
  2. LOG4J2-398

DateLookup not parsed for FastRollingFile appender

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.0-beta8
    • Fix Version/s: 2.0-rc1
    • Component/s: Appenders
    • Labels:
      None
    • Environment:

      Operating System: Windows Server 2008 R2 SP1
      Java Runtime: 1.7.0_03-x64

      Description

      I'm trying to create a Log4j2 configuration file that will create a log file using DateLookup so that the current date and time are in the filename (so it matches the logging used in our other products). This is what the appender configuration looks like:

      <FastRollingFile name="Rolling" fileName="log/$${date:yyyyMMdd-HHmmss} - myApp.log" filePattern="log/$${date:yyyyMMdd-HHmmss} - myApp-%i.log">
      	<immediateFlush>true</immediateFlush>
      	<suppressExceptions>false</suppressExceptions>
      	<PatternLayout>
      		<pattern>%d %p %c{1.} [%t] $${env:USER} %m%n</pattern>
      	</PatternLayout>
      	<Policies>
      		<OnStartupTriggeringPolicy />
      		<SizeBasedTriggeringPolicy size="100 MB"/>
      	</Policies>
      </FastRollingFile>
      

      However when the log file is generated the filename is "${date". I've tried different variations and haven't been able to get this lookup to work at all.

        Activity

        Hide
        Gary Gregory added a comment -

        As I see it in trunk right now, the fileName attribute does not accept patterns, just a file name.

        Show
        Gary Gregory added a comment - As I see it in trunk right now, the fileName attribute does not accept patterns, just a file name.
        Hide
        Ralph Goers added a comment - - edited

        That isn't quite true. The fileName is resolved when the Appender is created. Variables with only a single '$' are resolved when then configuration file is processed, so fileName="log/${date:yyyyMMdd-HHmmss} - myApp.log" would work but the file name would always have the time when the configuration was processed. In that context I am not sure using a Date lookup makes much sense in a fileName attribute.

        Show
        Ralph Goers added a comment - - edited That isn't quite true. The fileName is resolved when the Appender is created. Variables with only a single '$' are resolved when then configuration file is processed, so fileName="log/${date:yyyyMMdd-HHmmss} - myApp.log" would work but the file name would always have the time when the configuration was processed. In that context I am not sure using a Date lookup makes much sense in a fileName attribute.
        Hide
        Jesse Docken added a comment -

        The issue is still observed if I omit the fileName attribute and only use filePattern.

        Show
        Jesse Docken added a comment - The issue is still observed if I omit the fileName attribute and only use filePattern.
        Hide
        Gary Gregory added a comment -

        I stand corrected I should have read "Property Substitution" in http://logging.apache.org/log4j/2.x/manual/configuration.html more carefully!

        Show
        Gary Gregory added a comment - I stand corrected I should have read "Property Substitution" in http://logging.apache.org/log4j/2.x/manual/configuration.html more carefully!
        Hide
        Ralph Goers added a comment -

        Gary, all attributes support lookups with a single '$'. That is handled in BaseConfiguration at line 676.

        As for the filePattern, you may be hitting LOG4J2-380 which was recently fixed. Can you try with trunk?

        Show
        Ralph Goers added a comment - Gary, all attributes support lookups with a single '$'. That is handled in BaseConfiguration at line 676. As for the filePattern, you may be hitting LOG4J2-380 which was recently fixed. Can you try with trunk?
        Hide
        Jesse Docken added a comment -

        Is the trunk available in jar form to download? I don't think I have time to set up a dev environment to build log4j2 in.

        Show
        Jesse Docken added a comment - Is the trunk available in jar form to download? I don't think I have time to set up a dev environment to build log4j2 in.
        Hide
        Ralph Goers added a comment -

        I just happened to deploy beta9-SNAPSHOT. You will need to add the apache snapshots repository to your pom.

        Show
        Ralph Goers added a comment - I just happened to deploy beta9-SNAPSHOT. You will need to add the apache snapshots repository to your pom.
        Hide
        Jesse Docken added a comment -

        I'll take a look at it tomorrow and see if the beta9 snapshot works.

        Show
        Jesse Docken added a comment - I'll take a look at it tomorrow and see if the beta9 snapshot works.
        Hide
        Jesse Docken added a comment -

        Okay, I've managed to get beta9 snapshot from Maven but now when I run my program I get a CLASS_NOT_FOUND for FastRollingFile. Did something happen to the appender between the beta releases?

        Show
        Jesse Docken added a comment - Okay, I've managed to get beta9 snapshot from Maven but now when I run my program I get a CLASS_NOT_FOUND for FastRollingFile. Did something happen to the appender between the beta releases?
        Hide
        Gary Gregory added a comment -

        The "Fast" class names have been changed to "RandomAccess", please see LOG4J2-317.

        Show
        Gary Gregory added a comment - The "Fast" class names have been changed to "RandomAccess", please see LOG4J2-317 .
        Hide
        Jesse Docken added a comment -

        I'm still observing the same behavior, although now it generates an error if the fileName attribute is omitted (which is most likely the correct behavior). Am I simply configuring it improperly? What would be the correct way to configure an appender such that the filename always contains the date and time of when the file was initially generated (i.e., when the program began to run)? We don't want the filename to be lacking this timestamp at any point in time.

        Show
        Jesse Docken added a comment - I'm still observing the same behavior, although now it generates an error if the fileName attribute is omitted (which is most likely the correct behavior). Am I simply configuring it improperly? What would be the correct way to configure an appender such that the filename always contains the date and time of when the file was initially generated (i.e., when the program began to run)? We don't want the filename to be lacking this timestamp at any point in time.
        Hide
        Ralph Goers added a comment -

        1. I just want to verify that you know that with the rolling file appenders the fileName applies to the file that is "active". It is continually written to and when a rollover occurs that file is renamed or moved to a file matching the file pattern. At that point the "active" file is deleted and recreated or similar.
        2. If you want the "active" file to contain a timestamp then use the fileName I mentioned above with only a single '$' character - fileName="log/${date:yyyyMMdd-HHmmss} - myApp.log"

        Show
        Ralph Goers added a comment - 1. I just want to verify that you know that with the rolling file appenders the fileName applies to the file that is "active". It is continually written to and when a rollover occurs that file is renamed or moved to a file matching the file pattern. At that point the "active" file is deleted and recreated or similar. 2. If you want the "active" file to contain a timestamp then use the fileName I mentioned above with only a single '$' character - fileName="log/${date:yyyyMMdd-HHmmss} - myApp.log"
        Hide
        Jesse Docken added a comment - - edited

        Using a single '$' still causes this issue, it seems.
        The appender now looks like this:

        <RollingRandomAccessFile name="Rolling" fileName="log/${date:yyyyMMdd-HHmmss} - myApp.log" filePattern="log/$${date:yyyyMMdd-HHmmss} - myApp-%i.log">
        	<immediateFlush>true</immediateFlush>
        	<!--<suppressExceptions>false</suppressExceptions>-->
        	<PatternLayout>
        		<pattern>%d %p %c{1.} [%t] $${env:USER} %m%n</pattern>
        	</PatternLayout>
        	<Policies>
        		<OnStartupTriggeringPolicy />
        		<SizeBasedTriggeringPolicy size="100 MB"/>
        	</Policies>
        </RollingRandomAccessFile>
        
        Show
        Jesse Docken added a comment - - edited Using a single '$' still causes this issue, it seems. The appender now looks like this: <RollingRandomAccessFile name= "Rolling" fileName= "log/${date:yyyyMMdd-HHmmss} - myApp.log" filePattern= "log/$${date:yyyyMMdd-HHmmss} - myApp-%i.log" > <immediateFlush> true </immediateFlush> <!--<suppressExceptions> false </suppressExceptions>--> <PatternLayout> <pattern>%d %p %c{1.} [%t] $${env:USER} %m%n</pattern> </PatternLayout> <Policies> <OnStartupTriggeringPolicy /> <SizeBasedTriggeringPolicy size= "100 MB" /> </Policies> </RollingRandomAccessFile>
        Hide
        Ralph Goers added a comment -

        Can you please add status="trace" to your configuration element and provide the output of configuring Log4j?

        Ralph

        Show
        Ralph Goers added a comment - Can you please add status="trace" to your configuration element and provide the output of configuring Log4j? Ralph
        Hide
        Jesse Docken added a comment -
        2013-09-13 15:05:47,084 DEBUG Generated plugins in 0.000043995 seconds
        2013-09-13 15:05:47,085 DEBUG Generated plugins in 0.000020677 seconds
        2013-09-13 15:05:47,085 DEBUG Generated plugins in 0.000029476 seconds
        2013-09-13 15:05:47,086 DEBUG Generated plugins in 0.000018038 seconds
        2013-09-13 15:05:47,087 DEBUG Generated plugins in 0.000016719 seconds
        2013-09-13 15:05:47,087 DEBUG Generated plugins in 0.000016278 seconds
        2013-09-13 15:05:47,087 DEBUG Generated plugins in 0.000016278 seconds
        2013-09-13 15:05:47,088 DEBUG Generated plugins in 0.000016279 seconds
        2013-09-13 15:05:47,088 DEBUG Generated plugins in 0.000016278 seconds
        2013-09-13 15:05:47,089 DEBUG Generated plugins in 0.000015839 seconds
        2013-09-13 15:05:47,089 DEBUG Generated plugins in 0.000016719 seconds
        2013-09-13 15:05:47,089 DEBUG Generated plugins in 0.000015838 seconds
        2013-09-13 15:05:47,090 DEBUG Generated plugins in 0.000015839 seconds
        2013-09-13 15:05:47,090 DEBUG Generated plugins in 0.000024638 seconds
        2013-09-13 15:05:47,090 DEBUG Generated plugins in 0.000016279 seconds
        2013-09-13 15:05:47,106 DEBUG Calling createLayout on class org.apache.logging.log4j.core.layout.PatternLayout for element PatternLayout with params(pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n", Configuration(D:\Git\myApp\target\classes\log4j2.xml), null, charset="null", alwaysWriteExceptions="null")
        2013-09-13 15:05:47,107 DEBUG Generated plugins in 0.000036516 seconds
        2013-09-13 15:05:47,110 DEBUG Calling createAppender on class org.apache.logging.log4j.core.appender.ConsoleAppender for element Console with params(PatternLayout(%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n), null, target="SYSTEM_ERR", name="Console", follow="null", ignoreExceptions="null")
        2013-09-13 15:05:47,110 DEBUG Jansi is not installed
        2013-09-13 15:05:47,110 DEBUG Starting OutputStreamManager SYSTEM_ERR
        2013-09-13 15:05:47,112 DEBUG Calling createLayout on class org.apache.logging.log4j.core.layout.PatternLayout for element PatternLayout with params(pattern="%d %p %c{1.} [%t] ${env:USER} %m%n", Configuration(D:\Git\myApp\target\classes\log4j2.xml), null, charset="null", alwaysWriteExceptions="null")
        2013-09-13 15:05:47,113 DEBUG Calling createPolicy on class org.apache.logging.log4j.core.appender.rolling.OnStartupTriggeringPolicy for element OnStartupTriggeringPolicy
        2013-09-13 15:05:47,114 DEBUG Calling createPolicy on class org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy for element SizeBasedTriggeringPolicy with params(size="100 MB")
        2013-09-13 15:05:47,117 DEBUG Calling createPolicy on class org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy for element Policies with params(Policies={OnStartupTriggeringPolicy, SizeBasedTriggeringPolicy(size=104857600)})
        2013-09-13 15:05:47,120 DEBUG Calling createAppender on class org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender for element RollingRandomAccessFile with params(fileName="log/${date:yyyyMMdd-HHmmss} - myApp.log", filePattern="log/${date:yyyyMMdd-HHmmss} - myApp-%i.log", append="null", name="Rolling", immediateFlush="true", Policies(CompositeTriggeringPolicy{OnStartupTriggeringPolicy, SizeBasedTriggeringPolicy(size=104857600)}), null, PatternLayout(%d %p %c{1.} [%t] ${env:USER} %m%n), null, ignoreExceptions="null", advertise="null", advertiseURI="null", Configuration(D:\Git\myApp\target\classes\log4j2.xml))
        2013-09-13 15:05:47,126 TRACE RandomAccessFile log/${date:yyyyMMdd-HHmmss} - myApp.log seek to 3521
        2013-09-13 15:05:47,126 DEBUG Starting RollingRandomAccessFileManager log/${date:yyyyMMdd-HHmmss} - myApp.log
        2013-09-13 15:05:47,128 DEBUG Generated plugins in 0.000025957 seconds
        2013-09-13 15:05:47,130 DEBUG Calling createAppenders on class org.apache.logging.log4j.core.config.plugins.AppendersPlugin for element appenders with params(Appenders={Console, Rolling})
        2013-09-13 15:05:47,131 DEBUG Generated plugins in 0.000021558 seconds
        2013-09-13 15:05:47,133 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element appender-ref with params(ref="Console", level="null", null)
        2013-09-13 15:05:47,135 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig for element logger with params(additivity="null", level="fatal", name="com.app.myApp", includeLocation="null", AppenderRef={Console}, Properties={}, Configuration(D:\Git\myApp\target\classes\log4j2.xml), null)
        2013-09-13 15:05:47,136 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element appender-ref with params(ref="Rolling", level="null", null)
        2013-09-13 15:05:47,139 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element root with params(additivity="null", level="warn", includeLocation="null", AppenderRef={Rolling}, Properties={}, Configuration(D:\Git\myApp\target\classes\log4j2.xml), null)
        2013-09-13 15:05:47,140 DEBUG Calling createLoggers on class org.apache.logging.log4j.core.config.plugins.LoggersPlugin for element loggers with params(Loggers={com.app.myApp, root})
        2013-09-13 15:05:47,141 DEBUG Shutting down OutputStreamManager SYSTEM_OUT
        2013-09-13 15:05:47,142 DEBUG Reconfiguration completed
        
        Show
        Jesse Docken added a comment - 2013-09-13 15:05:47,084 DEBUG Generated plugins in 0.000043995 seconds 2013-09-13 15:05:47,085 DEBUG Generated plugins in 0.000020677 seconds 2013-09-13 15:05:47,085 DEBUG Generated plugins in 0.000029476 seconds 2013-09-13 15:05:47,086 DEBUG Generated plugins in 0.000018038 seconds 2013-09-13 15:05:47,087 DEBUG Generated plugins in 0.000016719 seconds 2013-09-13 15:05:47,087 DEBUG Generated plugins in 0.000016278 seconds 2013-09-13 15:05:47,087 DEBUG Generated plugins in 0.000016278 seconds 2013-09-13 15:05:47,088 DEBUG Generated plugins in 0.000016279 seconds 2013-09-13 15:05:47,088 DEBUG Generated plugins in 0.000016278 seconds 2013-09-13 15:05:47,089 DEBUG Generated plugins in 0.000015839 seconds 2013-09-13 15:05:47,089 DEBUG Generated plugins in 0.000016719 seconds 2013-09-13 15:05:47,089 DEBUG Generated plugins in 0.000015838 seconds 2013-09-13 15:05:47,090 DEBUG Generated plugins in 0.000015839 seconds 2013-09-13 15:05:47,090 DEBUG Generated plugins in 0.000024638 seconds 2013-09-13 15:05:47,090 DEBUG Generated plugins in 0.000016279 seconds 2013-09-13 15:05:47,106 DEBUG Calling createLayout on class org.apache.logging.log4j.core.layout.PatternLayout for element PatternLayout with params(pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n", Configuration(D:\Git\myApp\target\classes\log4j2.xml), null, charset="null", alwaysWriteExceptions="null") 2013-09-13 15:05:47,107 DEBUG Generated plugins in 0.000036516 seconds 2013-09-13 15:05:47,110 DEBUG Calling createAppender on class org.apache.logging.log4j.core.appender.ConsoleAppender for element Console with params(PatternLayout(%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n), null, target="SYSTEM_ERR", name="Console", follow="null", ignoreExceptions="null") 2013-09-13 15:05:47,110 DEBUG Jansi is not installed 2013-09-13 15:05:47,110 DEBUG Starting OutputStreamManager SYSTEM_ERR 2013-09-13 15:05:47,112 DEBUG Calling createLayout on class org.apache.logging.log4j.core.layout.PatternLayout for element PatternLayout with params(pattern="%d %p %c{1.} [%t] ${env:USER} %m%n", Configuration(D:\Git\myApp\target\classes\log4j2.xml), null, charset="null", alwaysWriteExceptions="null") 2013-09-13 15:05:47,113 DEBUG Calling createPolicy on class org.apache.logging.log4j.core.appender.rolling.OnStartupTriggeringPolicy for element OnStartupTriggeringPolicy 2013-09-13 15:05:47,114 DEBUG Calling createPolicy on class org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy for element SizeBasedTriggeringPolicy with params(size="100 MB") 2013-09-13 15:05:47,117 DEBUG Calling createPolicy on class org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy for element Policies with params(Policies={OnStartupTriggeringPolicy, SizeBasedTriggeringPolicy(size=104857600)}) 2013-09-13 15:05:47,120 DEBUG Calling createAppender on class org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender for element RollingRandomAccessFile with params(fileName="log/${date:yyyyMMdd-HHmmss} - myApp.log", filePattern="log/${date:yyyyMMdd-HHmmss} - myApp-%i.log", append="null", name="Rolling", immediateFlush="true", Policies(CompositeTriggeringPolicy{OnStartupTriggeringPolicy, SizeBasedTriggeringPolicy(size=104857600)}), null, PatternLayout(%d %p %c{1.} [%t] ${env:USER} %m%n), null, ignoreExceptions="null", advertise="null", advertiseURI="null", Configuration(D:\Git\myApp\target\classes\log4j2.xml)) 2013-09-13 15:05:47,126 TRACE RandomAccessFile log/${date:yyyyMMdd-HHmmss} - myApp.log seek to 3521 2013-09-13 15:05:47,126 DEBUG Starting RollingRandomAccessFileManager log/${date:yyyyMMdd-HHmmss} - myApp.log 2013-09-13 15:05:47,128 DEBUG Generated plugins in 0.000025957 seconds 2013-09-13 15:05:47,130 DEBUG Calling createAppenders on class org.apache.logging.log4j.core.config.plugins.AppendersPlugin for element appenders with params(Appenders={Console, Rolling}) 2013-09-13 15:05:47,131 DEBUG Generated plugins in 0.000021558 seconds 2013-09-13 15:05:47,133 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element appender-ref with params(ref="Console", level="null", null) 2013-09-13 15:05:47,135 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig for element logger with params(additivity="null", level="fatal", name="com.app.myApp", includeLocation="null", AppenderRef={Console}, Properties={}, Configuration(D:\Git\myApp\target\classes\log4j2.xml), null) 2013-09-13 15:05:47,136 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element appender-ref with params(ref="Rolling", level="null", null) 2013-09-13 15:05:47,139 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element root with params(additivity="null", level="warn", includeLocation="null", AppenderRef={Rolling}, Properties={}, Configuration(D:\Git\myApp\target\classes\log4j2.xml), null) 2013-09-13 15:05:47,140 DEBUG Calling createLoggers on class org.apache.logging.log4j.core.config.plugins.LoggersPlugin for element loggers with params(Loggers={com.app.myApp, root}) 2013-09-13 15:05:47,141 DEBUG Shutting down OutputStreamManager SYSTEM_OUT 2013-09-13 15:05:47,142 DEBUG Reconfiguration completed
        Hide
        Jesse Docken added a comment -

        Is there any further information needed on my part to help further diagnose this issue?

        Show
        Jesse Docken added a comment - Is there any further information needed on my part to help further diagnose this issue?
        Hide
        Porfirio Partida added a comment - - edited

        The thing is that the filename is not parsed, however you can pass variables defined as properties and you can add some contexts there in the property, look at this example:

        <?xml version="1.0" encoding="UTF-8"?>
        <Configuration status="debug">
        	<Properties>
        		<Property name="filename">log/LOG-$${date:yyyy-MM-dd HHmmss}.log</Property>
        	</Properties>
        	<appenders>
        		<RollingFile name="Rolling" fileName="${filename}"
        			filePattern="log/LogBackup-%d{MM-yyyy-MM-dd HHmmss}-%i.log.gz">
        			<PatternLayout>
        				<pattern>%d %p %C [%t] %m%n</pattern> <!-- %d %p %C{1.} [%t] %m%n -->
        			</PatternLayout>
        			<TimeBasedTriggeringPolicy />
        		</RollingFile>
        
        	</appenders>
        	<loggers>
        		<root level="debug">
        			<appender-ref ref="Rolling" />
        		</root>
        	</loggers>
        </Configuration>
        
        Show
        Porfirio Partida added a comment - - edited The thing is that the filename is not parsed, however you can pass variables defined as properties and you can add some contexts there in the property, look at this example: <?xml version= "1.0" encoding= "UTF-8" ?> <Configuration status= "debug" > <Properties> <Property name= "filename" >log/LOG-$${date:yyyy-MM-dd HHmmss}.log</Property> </Properties> <appenders> <RollingFile name= "Rolling" fileName= "${filename}" filePattern= "log/LogBackup-%d{MM-yyyy-MM-dd HHmmss}-%i.log.gz" > <PatternLayout> <pattern>%d %p %C [%t] %m%n</pattern> <!-- %d %p %C{1.} [%t] %m%n --> </PatternLayout> <TimeBasedTriggeringPolicy /> </RollingFile> </appenders> <loggers> <root level= "debug" > <appender-ref ref= "Rolling" /> </root> </loggers> </Configuration>
        Hide
        Jesse Docken added a comment -

        Using the property does resolve the issue. It seems very backwards, though; why are some attributes compatible with Lookups and some aren't? At the very least the documentation should reflect which fields support Lookups and which ones require this workaround.

        Show
        Jesse Docken added a comment - Using the property does resolve the issue. It seems very backwards, though; why are some attributes compatible with Lookups and some aren't? At the very least the documentation should reflect which fields support Lookups and which ones require this workaround.
        Hide
        Remko Popma added a comment -

        Ralph, based on Porfirio's comment above, could this issue be related to LOG4J2-470 (and therefore now also resolved)?

        Show
        Remko Popma added a comment - Ralph, based on Porfirio's comment above, could this issue be related to LOG4J2-470 (and therefore now also resolved)?
        Hide
        Ralph Goers added a comment - - edited

        Not completely. The default constructor for Interpolator does not include DateLookup and the "real" Interpolator isn't injected until after the first element - to allow the Properties element to be specified and for those properties to be included in the MapLookup. I'll need to make another change to determine if a Properties element is present and if not set up the Interpolator before the first element is configured.

        Actually, the fix for this issue probably would have fixed LOG4J2-470.

        Show
        Ralph Goers added a comment - - edited Not completely. The default constructor for Interpolator does not include DateLookup and the "real" Interpolator isn't injected until after the first element - to allow the Properties element to be specified and for those properties to be included in the MapLookup. I'll need to make another change to determine if a Properties element is present and if not set up the Interpolator before the first element is configured. Actually, the fix for this issue probably would have fixed LOG4J2-470 .
        Hide
        Ralph Goers added a comment -

        Fix commited in revision 1557491. Please verify and close.

        Show
        Ralph Goers added a comment - Fix commited in revision 1557491. Please verify and close.

          People

          • Assignee:
            Unassigned
            Reporter:
            Jesse Docken
          • Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development