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> >