private void logToLogger( Logger logger, LogLevel logLevel, LoggingObjectInterface loggingObject, LogMessage message ) { logToLogger( logger, logLevel, "[" + getDetailedSubject( loggingObject ) + "] " + message.getMessage() ); }
private String getDetailedSubject( LoggingObjectInterface loggingObject ) { LinkedList<String> subjects = new LinkedList<>(); while ( loggingObject != null ) { if ( loggingObject.getObjectType() == TRANS || loggingObject.getObjectType() == JOB ) { RepositoryDirectoryInterface rd = loggingObject.getRepositoryDirectory(); String filename = loggingObject.getFilename(); if ( rd != null ) { String path = rd.getPath(); if ( path.equals( SEPARATOR ) ) { if ( filename != null && filename.length() > 0 ) { subjects.add( filename ); } } else { subjects.add( path + SEPARATOR + filename ); } } else if ( filename != null && filename.length() > 0 ) { subjects.add( filename ); } } loggingObject = loggingObject.getParent(); } if ( subjects.size() > 0 ) { return subjects.size() > 1 ? formatDetailedSubject( subjects ) : subjects.get( 0 ); } else { return ""; } }
@Override public void eventAdded( KettleLoggingEvent event ) { Object messageObject = event.getMessage(); checkNotNull( messageObject, "Expected log message to be defined." ); if ( messageObject instanceof LogMessage ) { LogMessage message = (LogMessage) messageObject; LoggingObjectInterface loggingObject = logObjProvider.apply( message.getLogChannelId() ); if ( loggingObject == null ) { // this can happen if logObject has been discarded while log events are still in flight. logToLogger( diLogger, message.getLevel(), message.getSubject() + " " + message.getMessage() ); } else if ( loggingObject.getObjectType() == TRANS || loggingObject.getObjectType() == STEP || loggingObject.getObjectType() == DATABASE ) { logToLogger( transLogger, message.getLevel(), loggingObject, message ); } else if ( loggingObject.getObjectType() == JOB || loggingObject.getObjectType() == JOBENTRY ) { logToLogger( jobLogger, message.getLevel(), loggingObject, message ); } } }
KettleLogStore.getAppender().addLoggingEventListener( new ConsoleLoggingEventListener() ); KettleLogStore.getAppender().addLoggingEventListener( new Slf4jLoggingEventListener() );