/// <summary> /// Creates an instance of <see cref="AnankeSettings"/>, with default settings for any setting not specified. /// </summary> /// <param name="maximumRuntime">The amount of time application code should run until it is requested to exit. Defaults to infinite, but most apps should use a non-infinite time.</param> /// <param name="loggerFactory">The core logging factory used by all structured logging. Defaults to a logging factory with a single provider that writes formatted text to <see cref="ConsoleLog"/>.</param> /// <param name="loggerIsEnabledFilter">The filter used by the <see cref="AnankeLoggerProvider"/> if <paramref name="loggerFactory"/> is <c>null</c>.</param> /// <param name="loggerFormatter">The formatter used by the <see cref="AnankeLoggerProvider"/> if <paramref name="loggerFactory"/> is <c>null</c>.</param> /// <param name="exitTimeout">The amount of time application code has after it is requested to exit, before the process forcibly exits. Defaults to 10 seconds.</param> /// <param name="randomMaximumRuntimeRelativeDelta">The amount of random fluction in <see cref="MaximumRuntime"/>. E.g., <c>0.10</c> is a 10% change; if <see cref="MaximumRuntime"/> is 30 minutes, then the actual maximum runtime would be a random value between 27 and 33 minutes. Defaults to 0.10 (10%).</param> /// <param name="stdoutParser">A method that parses text written to stdout.</param> public static AnankeSettings Create(TimeSpan?maximumRuntime = null, ILoggerFactory loggerFactory = null, LoggerIsEnabledFilter loggerIsEnabledFilter = null, LoggerFormatter loggerFormatter = null, TimeSpan?exitTimeout = null, double?randomMaximumRuntimeRelativeDelta = null, StdoutParser stdoutParser = null) { return(InternalCreate(maximumRuntime, loggerFactory, loggerIsEnabledFilter, loggerFormatter, exitTimeout, randomMaximumRuntimeRelativeDelta, stdoutParser)); }
/// <summary> /// Creates a new logger provider. /// </summary> /// <param name="stringLog">The underlying string log to which all logs are written. May not be <c>null</c>.</param> /// <param name="formatter">The formatter used to translate log events into single-line strings. May not be <c>null</c>.</param> /// <param name="filter">The filter for determining which log events to log. May not be <c>null</c>.</param> public AnankeLoggerProvider(IStringLog stringLog, LoggerFormatter formatter, LoggerIsEnabledFilter filter) { if (stringLog == null) { throw new ArgumentNullException(nameof(stringLog)); } if (formatter == null) { throw new ArgumentNullException(nameof(formatter)); } if (filter == null) { throw new ArgumentNullException(nameof(filter)); } m_stringLog = stringLog; m_formatter = formatter; m_filter = filter; m_loggers = new ConcurrentDictionary <string, ILogger>(); }
internal static AnankeSettings InternalCreate(TimeSpan?maximumRuntime = null, ILoggerFactory loggerFactory = null, LoggerIsEnabledFilter loggerIsEnabledFilter = null, LoggerFormatter loggerFormatter = null, TimeSpan?exitTimeout = null, double?randomMaximumRuntimeRelativeDelta = null, StdoutParser stdoutParser = null, IStringLog consoleLog = null, IExitProcessService exitProcessService = null, ISignalService signalService = null) { if (signalService == null) { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { signalService = new WindowsSignalService(); } else { signalService = new UnixSignalService(); } } consoleLog = consoleLog ?? new TextWriterStringLog(Console.Out); loggerFormatter = loggerFormatter ?? AnankeFormatters.FormattedText; loggerIsEnabledFilter = loggerIsEnabledFilter ?? ((_, __) => true); var loggerProvider = new AnankeLoggerProvider(consoleLog, loggerFormatter, loggerIsEnabledFilter); if (loggerFactory == null) { loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(loggerProvider); } return(new AnankeSettings(maximumRuntime ?? Timeout.InfiniteTimeSpan, loggerFactory, exitTimeout ?? TimeSpan.FromSeconds(10), randomMaximumRuntimeRelativeDelta ?? 0.10, stdoutParser ?? ((message, provider) => provider.CreateLogger("App").LogInformation(message)), consoleLog, exitProcessService ?? new ExitProcessService(), signalService)); }