@Test void shouldReturnSameLoggerForSameContext() { // Given DuplicatingLogProvider logProvider = new DuplicatingLogProvider(); // Then DuplicatingLog log = logProvider.getLog( "test context" ); assertThat( logProvider.getLog( "test context" ), sameInstance( log ) ); }
@Override protected DuplicatingLog buildLog( final String name ) { return buildLog( logProvider -> logProvider.getLog( name ) ); }
/** * Remove a {@link LogProvider} from the duplicating set. Note that the LogProvider must return * cached Log instances from its {@link LogProvider#getLog(String)} for this to behave as expected. * * @param logProvider the LogProvider to be removed * @return true if the log was found and removed */ public boolean remove( LogProvider logProvider ) { if ( !this.logProviders.remove( logProvider ) ) { return false; } for ( DuplicatingLog duplicatingLog : cachedLogs() ) { duplicatingLog.remove( duplicatingLogCache.get( duplicatingLog ).remove( logProvider ) ); } return true; }
@Test void shouldRemoveLogProviderFromDuplication() { // Given AssertableLogProvider logProvider1 = new AssertableLogProvider(); AssertableLogProvider logProvider2 = new AssertableLogProvider(); DuplicatingLogProvider logProvider = new DuplicatingLogProvider( logProvider1, logProvider2 ); // When Log log = logProvider.getLog( getClass() ); log.info( "When the going gets weird" ); assertTrue( logProvider.remove( logProvider1 ) ); log.info( "The weird turn pro" ); // Then logProvider1.assertExactly( AssertableLogProvider.inLog( getClass() ).info( "When the going gets weird" ) ); logProvider2.assertExactly( AssertableLogProvider.inLog( getClass() ).info( "When the going gets weird" ), AssertableLogProvider.inLog( getClass() ).info( "The weird turn pro" ) ); } }
/** * Create log service with different user and internal log providers. * User logs will be duplicated to internal logs as well. * Should be used when user and internal are backed by different log providers. * @param userLogProvider user log provider * @param internalLogProvider internal log provider */ public SimpleLogService( LogProvider userLogProvider, LogProvider internalLogProvider ) { this.userLogProvider = new DuplicatingLogProvider( userLogProvider, internalLogProvider ); this.internalLogProvider = internalLogProvider; }
/** * Create log service with different user and internal log providers. * User logs will be duplicated to internal logs as well. * Should be used when user and internal are backed by different log providers. * @param userLogProvider user log provider * @param internalLogProvider internal log provider */ public SimpleLogService( LogProvider userLogProvider, LogProvider internalLogProvider ) { this.userLogProvider = new DuplicatingLogProvider( userLogProvider, internalLogProvider ); this.internalLogProvider = internalLogProvider; }
@Test void shouldReturnSameLoggerForSameClass() { // Given DuplicatingLogProvider logProvider = new DuplicatingLogProvider(); // Then DuplicatingLog log = logProvider.getLog( getClass() ); assertThat( logProvider.getLog( DuplicatingLogProviderTest.class ), sameInstance( log ) ); }
@Override protected DuplicatingLog buildLog( final Class loggingClass ) { return buildLog( logProvider -> logProvider.getLog( loggingClass ) ); }
/** * Remove a {@link LogProvider} from the duplicating set. Note that the LogProvider must return * cached Log instances from its {@link LogProvider#getLog(String)} for this to behave as expected. * * @param logProvider the LogProvider to be removed * @return true if the log was found and removed */ public boolean remove( LogProvider logProvider ) { if ( !this.logProviders.remove( logProvider ) ) { return false; } for ( DuplicatingLog duplicatingLog : cachedLogs() ) { duplicatingLog.remove( duplicatingLogCache.get( duplicatingLog ).remove( logProvider ) ); } return true; }
@Override protected DuplicatingLog buildLog( final Class loggingClass ) { return buildLog( logProvider -> logProvider.getLog( loggingClass ) ); }
@Override protected DuplicatingLog buildLog( final String name ) { return buildLog( logProvider -> logProvider.getLog( name ) ); }