src/vs/workbench/contrib/output/browser/output.contribution.ts/OutputContribution/registerOpenActiveLogOutputFileAction
class OutputContribution:	private registerOpenActiveLogOutputFileAction(): void {
		this._register(registerAction2(class extends Action2 {
			constructor() {
				super({
					id: `workbench.action.openActiveLogOutputFile`,
					title: { value: nls.localize('openActiveLogOutputFile', "Open Log Output File"), original: 'Open Log Output File' },
					menu: [{
						id: MenuId.ViewTitle,
						when: ContextKeyExpr.equals('view', OUTPUT_VIEW_ID),
						group: 'navigation',
						order: 4
					}],
					icon: Codicon.goToFile,
					precondition: CONTEXT_ACTIVE_LOG_OUTPUT
				});
			}
			async run(accessor: ServicesAccessor): Promise<void> {
				const outputService = accessor.get(IOutputService);
				const editorService = accessor.get(IEditorService);
				const instantiationService = accessor.get(IInstantiationService);
				const logFileOutputChannelDescriptor = this.getLogFileOutputChannelDescriptor(outputService);
				if (logFileOutputChannelDescriptor) {
					await editorService.openEditor(instantiationService.createInstance(LogViewerInput, logFileOutputChannelDescriptor), { pinned: true });
				}
			}
			private getLogFileOutputChannelDescriptor(outputService: IOutputService): IFileOutputChannelDescriptor | null {
				const channel = outputService.getActiveChannel();
				if (channel) {
					const descriptor = outputService.getChannelDescriptors().filter(c => c.id === channel.id)[0];
					if (descriptor && descriptor.file && descriptor.log) {
						return <IFileOutputChannelDescriptor>descriptor;
					}
				}
				return null;
			}
		}));
	}