public AsyncRequestLog( FileSystemAbstraction fs, ZoneId logTimeZone, String logFile, long rotationSize, int rotationKeepNumber ) throws IOException { NamedThreadFactory threadFactory = new NamedThreadFactory( "HTTP-Log-Rotator", true ); ExecutorService rotationExecutor = Executors.newCachedThreadPool( threadFactory ); outputSupplier = new RotatingFileOutputStreamSupplier( fs, new File( logFile ), rotationSize, 0, rotationKeepNumber, rotationExecutor ); FormattedLogProvider logProvider = FormattedLogProvider.withZoneId( logTimeZone ) .toOutputStream( outputSupplier ); asyncLogProcessingExecutor = Executors.newSingleThreadExecutor( new NamedThreadFactory( "HTTP-Log-Writer" ) ); asyncEventProcessor = new AsyncEvents<>( this, this ); AsyncLogProvider asyncLogProvider = new AsyncLogProvider( asyncEventProcessor, logProvider ); log = asyncLogProvider.getLog( "REQUEST" ); }
@Override public void outputFileCreated( OutputStream newStream ) { FormattedLogProvider logProvider = internalLogBuilder.toOutputStream( newStream ); logProvider.getLog( StoreLogService.class ).info( "Opened new internal log file" ); rotationListener.accept( logProvider ); }
public static class Builder { private LogProvider userLogProvider = NullLogProvider.getInstance(); private Executor rotationExecutor; private long internalLogRotationThreshold; private long internalLogRotationDelay; private int maxInternalLogArchives; private Consumer<LogProvider> rotationListener = logProvider -> { }; private Map<String, Level> logLevels = new HashMap<>(); private Level defaultLevel = Level.INFO; private ZoneId timeZoneId = ZoneOffset.UTC; private File debugLog; private Builder() { } public Builder withUserLogProvider( LogProvider userLogProvider ) { this.userLogProvider = userLogProvider; return this; } public Builder withRotation( long internalLogRotationThreshold, long internalLogRotationDelay, int maxInternalLogArchives, JobScheduler jobScheduler ) { return withRotation( internalLogRotationThreshold, internalLogRotationDelay, maxInternalLogArchives, jobScheduler.executor( Group.LOG_ROTATION ) );
private LogProvider setupLogging( Config config ) { FormattedLogProvider.Builder builder = FormattedLogProvider .withoutRenderingContext() .withZoneId( config.get( GraphDatabaseSettings.db_timezone ).getZoneId() ) .withDefaultLogLevel( config.get( GraphDatabaseSettings.store_internal_log_level ) ); LogProvider userLogProvider = config.get( GraphDatabaseSettings.store_user_log_to_stdout ) ? builder.toOutputStream( System.out ) : createFileSystemUserLogProvider( config, builder ); JULBridge.resetJUL(); Logger.getLogger( "" ).setLevel( Level.WARNING ); JULBridge.forwardTo( userLogProvider ); JettyLogBridge.setLogProvider( userLogProvider ); return userLogProvider; }
@Override public void outputFileCreated( OutputStream newStream ) { FormattedLogProvider logProvider = internalLogBuilder.toOutputStream( newStream ); logProvider.getLog( StoreLogService.class ).info( "Opened new internal log file" ); rotationListener.accept( logProvider ); }
/** * Creates a {@link FormattedLogProvider} instance that writes messages to an {@link OutputStream}. * * @param out An {@link OutputStream} to write to * @return A {@link FormattedLogProvider} instance that writes to the specified OutputStream */ public static FormattedLogProvider toOutputStream( OutputStream out ) { return new Builder().toOutputStream( out ); }
/** * Creates a {@link FormattedLogProvider} instance that writes messages to {@link OutputStream}s obtained from the specified * {@link Supplier}. The OutputStream is obtained from the Supplier before every log message is written. * * @param outSupplier A supplier for an output stream to write to * @return A {@link FormattedLogProvider} instance */ public static FormattedLogProvider toOutputStream( Supplier<OutputStream> outSupplier ) { return new Builder().toOutputStream( outSupplier ); }
@Override public void rotationError( Exception e, OutputStream outStream ) { FormattedLogProvider logProvider = internalLogBuilder.toOutputStream( outStream ); logProvider.getLog( StoreLogService.class ).info( "Rotation of internal log file failed:", e ); } } );
@Override public void rotationCompleted( OutputStream newStream ) { FormattedLogProvider logProvider = internalLogBuilder.toOutputStream( newStream ); logProvider.getLog( StoreLogService.class ).info( "Rotated internal log file" ); }
FormattedLogProvider.withZoneId( logTimeZone ).toOutputStream( System.out ), fileSystem, verbose, reportDir.toFile(), new ConsistencyFlags( checkGraph, checkIndexes, checkLabelScanStore, checkPropertyOwners ) );
config.put( GraphDatabaseSettings.store_internal_log_path.name(), internalLogFile.getAbsolutePath() ); LogProvider userLogProvider = FormattedLogProvider.withZoneId( logZoneIdFrom( config ) ).toOutputStream( logOutputStream ); GraphDatabaseDependencies dependencies = GraphDatabaseDependencies.newDependencies() .userLogProvider( userLogProvider );
private LogProvider createFileSystemUserLogProvider( Config config, FormattedLogProvider.Builder builder ) { BufferingExecutor deferredExecutor = new BufferingExecutor(); dependencies.withDeferredExecutor( deferredExecutor, Group.LOG_ROTATION ); FileSystemAbstraction fs = new DefaultFileSystemAbstraction(); File destination = config.get( GraphDatabaseSettings.store_user_log_path ); Long rotationThreshold = config.get( GraphDatabaseSettings.store_user_log_rotation_threshold ); try { if ( rotationThreshold == 0L ) { userLogFileStream = createOrOpenAsOutputStream( fs, destination, true ); return builder.toOutputStream( userLogFileStream ); } return builder.toOutputStream( new RotatingFileOutputStreamSupplier( fs, destination, rotationThreshold, config.get( GraphDatabaseSettings.store_user_log_rotation_delay ).toMillis(), config.get( GraphDatabaseSettings.store_user_log_max_archives ), deferredExecutor ) ); } catch ( IOException e ) { throw new RuntimeException( e ); } }
public File dumpState( Locks lm, LockWorker... workers ) throws IOException { FileOutputStream out = new FileOutputStream( file, false ); FormattedLogProvider logProvider = FormattedLogProvider.withoutAutoFlush().toOutputStream( out ); try { // * locks held by the lock manager lm.accept( new DumpLocksVisitor( logProvider.getLog( LockWorkFailureDump.class ) ) ); // * rag manager state; // * workers state Log log = logProvider.getLog( getClass() ); for ( LockWorker worker : workers ) { // - what each is doing and have up to now log.info( "Worker %s", worker ); } return file; } finally { out.flush(); out.close(); } } }
/** * Create page cache * @param fileSystem file system that page cache will be based on * @param pageCacheTracer global page cache tracer * @param pageCursorTracerSupplier supplier of thread local (transaction local) page cursor tracer that will provide * thread local page cache statistics * @param config page cache configuration * @param versionContextSupplier version context supplier * @param jobScheduler page cache job scheduler * @return created page cache instance */ public static PageCache createPageCache( FileSystemAbstraction fileSystem, PageCacheTracer pageCacheTracer, PageCursorTracerSupplier pageCursorTracerSupplier, Config config, VersionContextSupplier versionContextSupplier, JobScheduler jobScheduler ) { config.augmentDefaults( GraphDatabaseSettings.pagecache_memory, "8M" ); ZoneId logTimeZone = config.get( GraphDatabaseSettings.db_timezone ).getZoneId(); FormattedLogProvider logProvider = FormattedLogProvider.withZoneId( logTimeZone ).toOutputStream( System.err ); ConfiguringPageCacheFactory pageCacheFactory = new ConfiguringPageCacheFactory( fileSystem, config, pageCacheTracer, pageCursorTracerSupplier, logProvider.getLog( PageCache.class ), versionContextSupplier, jobScheduler ); return pageCacheFactory.getOrCreatePageCache(); } }
ConsistencyCheckService.Result run( String... args ) throws ToolFailureException { Args arguments = Args.withFlags( VERBOSE ).parse( args ); File storeDir = determineStoreDirectory( arguments ); Config tuningConfiguration = readConfiguration( arguments ); boolean verbose = isVerbose( arguments ); DatabaseLayout databaseLayout = DatabaseLayout.of( storeDir ); checkDbState( databaseLayout, tuningConfiguration ); ZoneId logTimeZone = tuningConfiguration.get( GraphDatabaseSettings.db_timezone ).getZoneId(); LogProvider logProvider = FormattedLogProvider.withZoneId( logTimeZone ).toOutputStream( systemOut ); try { return consistencyCheckService.runFullConsistencyCheck( databaseLayout, tuningConfiguration, ProgressMonitorFactory.textual( systemError ), logProvider, fs, verbose, new ConsistencyFlags( tuningConfiguration ) ); } catch ( ConsistencyCheckIncompleteException e ) { throw new ToolFailureException( "Check aborted due to exception", e ); } }
private LogProvider setupLogging( Config config ) { FormattedLogProvider.Builder builder = FormattedLogProvider .withoutRenderingContext() .withZoneId( config.get( GraphDatabaseSettings.db_timezone ).getZoneId() ) .withDefaultLogLevel( config.get( GraphDatabaseSettings.store_internal_log_level ) ); LogProvider userLogProvider = config.get( GraphDatabaseSettings.store_user_log_to_stdout ) ? builder.toOutputStream( System.out ) : createFileSystemUserLogProvider( config, builder ); JULBridge.resetJUL(); Logger.getLogger( "" ).setLevel( Level.WARNING ); JULBridge.forwardTo( userLogProvider ); JettyLogBridge.setLogProvider( userLogProvider ); return userLogProvider; }
/** * Creates a {@link FormattedLogProvider} instance that writes messages to an {@link OutputStream}. * * @param out An {@link OutputStream} to write to * @return A {@link FormattedLogProvider} instance that writes to the specified OutputStream */ public static FormattedLogProvider toOutputStream( OutputStream out ) { return new Builder().toOutputStream( out ); }
@Override public void rotationCompleted( OutputStream newStream ) { FormattedLogProvider logProvider = internalLogBuilder.toOutputStream( newStream ); logProvider.getLog( StoreLogService.class ).info( "Rotated internal log file" ); }
/** * Creates a {@link FormattedLogProvider} instance that writes messages to {@link OutputStream}s obtained from the specified * {@link Supplier}. The OutputStream is obtained from the Supplier before every log message is written. * * @param outSupplier A supplier for an output stream to write to * @return A {@link FormattedLogProvider} instance */ public static FormattedLogProvider toOutputStream( Supplier<OutputStream> outSupplier ) { return new Builder().toOutputStream( outSupplier ); }
@Override public void rotationError( Exception e, OutputStream outStream ) { FormattedLogProvider logProvider = internalLogBuilder.toOutputStream( outStream ); logProvider.getLog( StoreLogService.class ).info( "Rotation of internal log file failed:", e ); } } );