@@ -339,27 +339,46 @@ protected IList<ILoggerProvider> CreateLoggerProviders(IConfiguration configurat
339339 // backward compatibility for --eventhub
340340 if ( ! string . IsNullOrEmpty ( this . EventHubStore ) )
341341 {
342- this . loggerDefinitions . Add ( $ "eventhub= { this . EventHubStore } ") ;
342+ this . loggerDefinitions . Add ( $ "eventhub; { this . EventHubStore } ") ;
343343 }
344344
345345 if ( ! this . loggerDefinitions . Any ( l => l . Equals ( "proxy" , StringComparison . OrdinalIgnoreCase ) || l . StartsWith ( "proxy=" , StringComparison . OrdinalIgnoreCase ) )
346346 && this . ProxyApiUri != null )
347347 {
348- this . loggerDefinitions . Add ( $ "proxy= { this . ProxyApiUri . ToString ( ) } ") ;
348+ this . loggerDefinitions . Add ( $ "proxy; { this . ProxyApiUri . ToString ( ) } ") ;
349349 }
350350
351351 LogLevel loggingLevel = this . LoggingLevel ?? LogLevel . Information ;
352352
353353 foreach ( string loggerDefinition in this . loggerDefinitions )
354354 {
355355 string loggerName = loggerDefinition ;
356- string definitionValue = string . Empty ;
357- if ( loggerDefinition . Contains ( "=" ) )
356+ string loggerParameters = string . Empty ;
357+
358+ // e.g.
359+ // --logger=SummaryFileLoggerProvider;../logs/{experimentId}-summary.txt
360+ int indexOfDelimiter = loggerDefinition . IndexOf ( ';' ) ;
361+ if ( indexOfDelimiter >= 0 )
358362 {
359- loggerName = loggerDefinition . Substring ( 0 , loggerDefinition . IndexOf ( "=" , StringComparison . Ordinal ) ) . Trim ( ) ;
360- definitionValue = loggerDefinition . Substring ( loggerDefinition . IndexOf ( "=" , StringComparison . Ordinal ) + 1 ) ;
363+ loggerName = loggerName . Substring ( 0 , indexOfDelimiter ) ;
364+ loggerParameters = loggerDefinition . Substring ( indexOfDelimiter + 1 ) ;
361365 }
362366
367+ // Support placeholder replacements (e.g. {experimentId}, {agentId}).
368+ IDictionary < string , IConvertible > replacements = new Dictionary < string , IConvertible > ( StringComparer . OrdinalIgnoreCase )
369+ {
370+ { "experimentId" , this . ExperimentId } ,
371+ { "agentId" , this . ClientId } ,
372+ { "clientId" , this . ClientId }
373+ } ;
374+
375+ if ( this . Metadata ? . Any ( ) == true )
376+ {
377+ replacements . AddRange ( this . Metadata ) ;
378+ }
379+
380+ loggerParameters = FileContext . ResolvePathTemplate ( loggerParameters , replacements ) ;
381+
363382 switch ( loggerName . ToLowerInvariant ( ) )
364383 {
365384 case "console" :
@@ -371,12 +390,12 @@ protected IList<ILoggerProvider> CreateLoggerProviders(IConfiguration configurat
371390 break ;
372391
373392 case "eventhub" :
374- DependencyEventHubStore store = EndpointUtility . CreateEventHubStoreReference ( DependencyStore . Telemetry , endpoint : definitionValue , this . CertificateManager ?? new CertificateManager ( ) ) ;
393+ DependencyEventHubStore store = EndpointUtility . CreateEventHubStoreReference ( DependencyStore . Telemetry , endpoint : loggerParameters , this . CertificateManager ?? new CertificateManager ( ) ) ;
375394 CommandBase . AddEventHubLogging ( loggingProviders , configuration , store , loggingLevel ) ;
376395 break ;
377396
378397 case "proxy" :
379- CommandBase . AddProxyApiLogging ( loggingProviders , configuration , platformSpecifics , new Uri ( definitionValue ) , source ) ;
398+ CommandBase . AddProxyApiLogging ( loggingProviders , configuration , platformSpecifics , new Uri ( loggerParameters ) , source ) ;
380399 break ;
381400
382401 default :
@@ -387,7 +406,7 @@ protected IList<ILoggerProvider> CreateLoggerProviders(IConfiguration configurat
387406 $ "or is not defined in the extensions assemblies provided to the application.") ;
388407 }
389408
390- ILoggerProvider customLoggerProvider = ( ILoggerProvider ) Activator . CreateInstance ( subcomponentType , definitionValue ) ;
409+ ILoggerProvider customLoggerProvider = ( ILoggerProvider ) Activator . CreateInstance ( subcomponentType , loggerParameters ) ;
391410 loggingProviders . Add ( customLoggerProvider ) ;
392411 break ;
393412 }
0 commit comments