I plan on removing the “extends Closeable” from the StatusListener interface 
and then creating a StatusCloseableListener that extends StatusConsoleListener. 
The close method will move there. Then in StatusConfiguration we will create 
the appropriate type based on what the destination is set to.  I may choose to 
create a static map in StatusCloseableListener and keep a counter for each 
destination name or I may just use the property that says whether it is a web 
container and not close the files if it is.  I am not sure yet which would be 
the best option.

Ralph

On May 4, 2014, at 4:30 PM, Matt Sicker <boa...@gmail.com> wrote:

> Could you summarize how you'd implement this? Idea sharing could help reduce 
> the overall effort required to elegantly fix this.
> 
> 
> On 4 May 2014 16:00, Bruce Brouwer <bruce.brou...@gmail.com> wrote:
> I was hoping to hear from Ralph as it sounds like he already started 
> something.
> 
> On May 4, 2014 3:22 PM, "Matt Sicker" <boa...@gmail.com> wrote:
> If you've got a good idea on how to do it, sure.
> 
> 
> On 4 May 2014 14:04, Bruce Brouwer <bruce.brou...@gmail.com> wrote:
> I haven't spent much time on this since my initial attempt on 609. Shall I 
> leave it to Ralph to come up with the final solution, or would you like me to 
> try?
> 
> On May 4, 2014 2:35 PM, "Matt Sicker" <boa...@gmail.com> wrote:
> Looks like there's nothing to synchronise on actually. Guess you can just 
> cache them before the check in general.
> 
> 
> On 4 May 2014 13:25, Matt Sicker <boa...@gmail.com> wrote:
> Oh phew. Well, I'll leave that to you if you wanted to continue what you were 
> working on. All I added was a check on close() to compare against the current 
> System.out and System.err. I'll take a look into OpenJDK to see how to 
> properly lock those (if possible) to prevent fun race conditions.
> 
> 
> On 4 May 2014 13:11, Ralph Goers <rgo...@apache.org> wrote:
> No, it can be simpler than that.
> 
> Sent from my iPad
> 
> On May 4, 2014, at 10:55 AM, Matt Sicker <boa...@gmail.com> wrote:
> 
>> This is starting to sound like we need a full-blown factory/context/logger 
>> implementation of StatusLogger.
>> 
>> 
>> On 4 May 2014 12:46, Ralph Goers <rgo...@apache.org> wrote:
>> Also, that doesn't solve the case Remko mentioned of multiple web apps 
>> writing to a single file.
>> 
>> Ralph
>> 
>> On May 4, 2014, at 9:53 AM, Matt Sicker <boa...@gmail.com> wrote:
>> 
>>> So how about adding a check at construction checking against System.out and 
>>> System.err? Really, once you start messing with those streams, you can't be 
>>> sure they'll ever be closed until the JVM stops or you manually close it.
>>> 
>>> 
>>> On 4 May 2014 09:36, Ralph Goers <rgo...@apache.org> wrote:
>>> I see two choices here - maintain a use count or just let the OS close the 
>>> files. 
>>> 
>>> The second would be pretty easy to do once we move the web stuff to its own 
>>> module as it can add a property that the console Appender would look for.
>>> 
>>> The first option is probably better if it could be made to work properly.
>>> 
>>> Ralph
>>> 
>>> On May 4, 2014, at 6:38 AM, Bruce Brouwer <bruce.brou...@gmail.com> wrote:
>>> 
>>>> This is what I was starting to investigate with LOG4J2-609.
>>>> 
>>>> I don't think this is quite there yet. For one, in 
>>>> StatusConsoleListener.close(), System.out and System.err can change over 
>>>> time, so doing the != check might still close something that at one time 
>>>> was System.out but no longer is. 
>>>> 
>>>> Also, a StatusConsoleListener is shared among different JSONConfiguration 
>>>> and XMLConfiguration instances (think about multiple WARs in a Tomcat 
>>>> instance where log4j is in Tomcat's shared lib directory). If we 
>>>> undeployed one of those WARs, it would shutdown the StatusConsoleListener 
>>>> that was shared with the other WAR deployments. 
>>>> 
>>>> Also think about where some of these WARs wanted to use System.out and 
>>>> others want to use a log file for status logging. Because of the way these 
>>>> shared loggers are found, only the first StatusConsoleListener registered 
>>>> would actually take effect. So sometimes when you start Tomcat, status 
>>>> logs go to System.out, other times they go to a log file. I'd hate having 
>>>> to debug that one if I didn't know about this issue. 
>>>> 
>>>> I have an idea of how to address this, but it unfortunately isn't as 
>>>> simple as closing the StatusConsoleListener.
>>>> 
>>>> 
>>>> On Sat, May 3, 2014 at 10:04 PM, Matt Sicker <boa...@gmail.com> wrote:
>>>> Hooray, we've finally figured out the bug. :)
>>>> 
>>>> 
>>>> On 3 May 2014 19:49, Remko Popma <remko.po...@gmail.com> wrote:
>>>> I just updated from SVN and all tests now pass.
>>>> The build works now. Thanks!
>>>> 
>>>> 
>>>> On Sun, May 4, 2014 at 7:55 AM, Matt Sicker <boa...@gmail.com> wrote:
>>>> I just fixed it in r1592291 haha
>>>> 
>>>> 
>>>> On 3 May 2014 17:54, Ralph Goers <ralph.go...@dslextreme.com> wrote:
>>>> Yes. It cause them to close. Anything written to System.out or System.err 
>>>> will fail.
>>>> 
>>>> On May 3, 2014, at 3:51 PM, Matt Sicker <boa...@gmail.com> wrote:
>>>> 
>>>>> Does closing them do anything?
>>>>> 
>>>>> 
>>>>> On 3 May 2014 17:10, Ralph Goers <ralph.go...@dslextreme.com> wrote:
>>>>> Perhaps we need a StatusFileListerner when writing to a file?
>>>>> 
>>>>> Ralph
>>>>> 
>>>>> On May 3, 2014, at 3:03 PM, Ralph Goers <ralph.go...@dslextreme.com> 
>>>>> wrote:
>>>>> 
>>>>>> System.out or System.err should never be closed.
>>>>>> 
>>>>>> Ralph
>>>>>> 
>>>>>> On May 3, 2014, at 10:59 AM, Matt Sicker <boa...@gmail.com> wrote:
>>>>>> 
>>>>>>> I've implemented Closeable on StatusListener in r1592258. Please try 
>>>>>>> out the unit tests again and let me know if this solves the issue on 
>>>>>>> Windows.
>>>>>>> 
>>>>>>> 
>>>>>>> On 3 May 2014 12:30, Matt Sicker <boa...@gmail.com> wrote:
>>>>>>> I think this is actually a bug. StatusListener should implement 
>>>>>>> Closeable, and when the listeners are cleared, it should loop through 
>>>>>>> and close them before clearing the list of listeners. Otherwise, files 
>>>>>>> can stay opened and Windows still hasn't figured out how to handle that.
>>>>>>> 
>>>>>>> 
>>>>>>> On 3 May 2014 11:22, Remko Popma <remko.po...@gmail.com> wrote:
>>>>>>> Thanks, commenting out that test to verify my changes was exactly what 
>>>>>>> I was doing now... :-)
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> On Sun, May 4, 2014 at 1:20 AM, Ralph Goers 
>>>>>>> <ralph.go...@dslextreme.com> wrote:
>>>>>>> 
>>>>>>> Oh, and if you are trying to do some work just comment out the @Test of 
>>>>>>> the failing test - but don’t commit that. 
>>>>>>> Ralph
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> On May 3, 2014, at 9:19 AM, Ralph Goers <ralph.go...@dslextreme.com> 
>>>>>>> wrote:
>>>>>>> 
>>>>>>>> That happens because the file is still being referenced by something 
>>>>>>>> when it is trying to delete it.  It should be because the file is open 
>>>>>>>> but I recall reading that Windows sometimes holds on to file 
>>>>>>>> references longer than it should.  This was probably caused by the 
>>>>>>>> changes Matt made to the unit test framework a month or so ago.  I 
>>>>>>>> will bring up my Windows VM and take a look at it this afternoon.
>>>>>>>> 
>>>>>>>> Ralph
>>>>>>>> 
>>>>>>>> On May 3, 2014, at 8:58 AM, Remko Popma <remko.po...@gmail.com> wrote:
>>>>>>>> 
>>>>>>>>> Yes, windows 7.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On Sun, May 4, 2014 at 12:54 AM, Ralph Goers 
>>>>>>>>> <ralph.go...@dslextreme.com> wrote:
>>>>>>>>> FileOutputTest was failing for me last week and I thought I fixed it. 
>>>>>>>>> But it was failing because the file was empty, not because it 
>>>>>>>>> couldn’t be deleted. I guess you must be running on Windows?
>>>>>>>>> 
>>>>>>>>> Ralph
>>>>>>>>> 
>>>>>>>>> On May 3, 2014, at 8:44 AM, Remko Popma <remko.po...@gmail.com> wrote:
>>>>>>>>> 
>>>>>>>>> > When I run mvn clean install, I get this problem:
>>>>>>>>> >
>>>>>>>>> > Failed tests:
>>>>>>>>> >   FileOutputTest.testConfig Could not delete target\status.log, 
>>>>>>>>> > last modifed 14/05/04 0:27
>>>>>>>>> >
>>>>>>>>> > FileOutputTest has a "CleanFiles" rule that seems to fail:
>>>>>>>>> >     public RuleChain rules = RuleChain.outerRule(new 
>>>>>>>>> > CleanFiles(STATUS_LOG)).around(new InitialLoggerContext(CONFIG));
>>>>>>>>> >
>>>>>>>>> > How do I fix this?
>>>>>>>>> >
>>>>>>>>> > Remko
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>> To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org
>>>>>>>>> For additional commands, e-mail: log4j-dev-h...@logging.apache.org
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> -- 
>>>>>>> Matt Sicker <boa...@gmail.com>
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> -- 
>>>>>>> Matt Sicker <boa...@gmail.com>
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> -- 
>>>>> Matt Sicker <boa...@gmail.com>
>>>> 
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> Matt Sicker <boa...@gmail.com>
>>>> 
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> Matt Sicker <boa...@gmail.com>
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> 
>>>> Bruce Brouwer
>>> 
>>> 
>>> 
>>> -- 
>>> Matt Sicker <boa...@gmail.com>
>> 
>> 
>> 
>> -- 
>> Matt Sicker <boa...@gmail.com>
> 
> 
> 
> -- 
> Matt Sicker <boa...@gmail.com>
> 
> 
> 
> -- 
> Matt Sicker <boa...@gmail.com>
> 
> 
> 
> -- 
> Matt Sicker <boa...@gmail.com>
> 
> 
> 
> -- 
> Matt Sicker <boa...@gmail.com>

Reply via email to