Move logging stuff
This commit is contained in:
@@ -7,6 +7,13 @@ namespace Umbraco.Core.Logging
|
||||
/// </summary>
|
||||
public class DebugDiagnosticsLogger : ILogger
|
||||
{
|
||||
private readonly IMessageTemplates _messageTemplates;
|
||||
|
||||
public DebugDiagnosticsLogger(IMessageTemplates messageTemplates)
|
||||
{
|
||||
_messageTemplates = messageTemplates;
|
||||
}
|
||||
|
||||
public bool IsEnabled(Type reporting, LogLevel level)
|
||||
=> true;
|
||||
|
||||
@@ -31,7 +38,7 @@ namespace Umbraco.Core.Logging
|
||||
/// <inheritdoc/>
|
||||
public void Fatal(Type reporting, Exception exception, string messageTemplate, params object[] propertyValues)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(MessageTemplates.Render(messageTemplate, propertyValues) + Environment.NewLine + exception, reporting.FullName);
|
||||
System.Diagnostics.Debug.WriteLine(_messageTemplates.Render(messageTemplate, propertyValues) + Environment.NewLine + exception, reporting.FullName);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -61,7 +68,7 @@ namespace Umbraco.Core.Logging
|
||||
/// <inheritdoc/>
|
||||
public void Error(Type reporting, Exception exception, string messageTemplate, params object[] propertyValues)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(MessageTemplates.Render(messageTemplate, propertyValues) + Environment.NewLine + exception, reporting.FullName);
|
||||
System.Diagnostics.Debug.WriteLine(_messageTemplates.Render(messageTemplate, propertyValues) + Environment.NewLine + exception, reporting.FullName);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -79,7 +86,7 @@ namespace Umbraco.Core.Logging
|
||||
/// <inheritdoc/>
|
||||
public void Warn(Type reporting, string message, params object[] propertyValues)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(MessageTemplates.Render(message, propertyValues), reporting.FullName);
|
||||
System.Diagnostics.Debug.WriteLine(_messageTemplates.Render(message, propertyValues), reporting.FullName);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -91,7 +98,7 @@ namespace Umbraco.Core.Logging
|
||||
/// <inheritdoc/>
|
||||
public void Warn(Type reporting, Exception exception, string message, params object[] propertyValues)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(MessageTemplates.Render(message + Environment.NewLine + exception, propertyValues), reporting.FullName);
|
||||
System.Diagnostics.Debug.WriteLine(_messageTemplates.Render(message + Environment.NewLine + exception, propertyValues), reporting.FullName);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -103,7 +110,7 @@ namespace Umbraco.Core.Logging
|
||||
/// <inheritdoc/>
|
||||
public void Info(Type reporting, string messageTemplate, params object[] propertyValues)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(MessageTemplates.Render(messageTemplate, propertyValues), reporting.FullName);
|
||||
System.Diagnostics.Debug.WriteLine(_messageTemplates.Render(messageTemplate, propertyValues), reporting.FullName);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -115,7 +122,7 @@ namespace Umbraco.Core.Logging
|
||||
/// <inheritdoc/>
|
||||
public void Debug(Type reporting, string messageTemplate, params object[] propertyValues)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(MessageTemplates.Render(messageTemplate, propertyValues), reporting.FullName);
|
||||
System.Diagnostics.Debug.WriteLine(_messageTemplates.Render(messageTemplate, propertyValues), reporting.FullName);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -127,7 +134,7 @@ namespace Umbraco.Core.Logging
|
||||
/// <inheritdoc/>
|
||||
public void Verbose(Type reporting, string messageTemplate, params object[] propertyValues)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(MessageTemplates.Render(messageTemplate, propertyValues), reporting.FullName);
|
||||
System.Diagnostics.Debug.WriteLine(_messageTemplates.Render(messageTemplate, propertyValues), reporting.FullName);
|
||||
}
|
||||
}
|
||||
}
|
||||
7
src/Umbraco.Abstractions/Logging/IMessageTemplates.cs
Normal file
7
src/Umbraco.Abstractions/Logging/IMessageTemplates.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace Umbraco.Core.Logging
|
||||
{
|
||||
public interface IMessageTemplates
|
||||
{
|
||||
string Render(string messageTemplate, params object[] args);
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ namespace Umbraco.Core.Logging
|
||||
/// <summary>
|
||||
/// Implements <see cref="IProfiler"/> by writing profiling results to an <see cref="ILogger"/>.
|
||||
/// </summary>
|
||||
internal class LogProfiler : IProfiler
|
||||
public class LogProfiler : IProfiler
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace Umbraco.Core.Logging
|
||||
{
|
||||
internal class VoidProfiler : IProfiler
|
||||
public class VoidProfiler : IProfiler
|
||||
{
|
||||
private readonly VoidDisposable _disposable = new VoidDisposable();
|
||||
|
||||
@@ -113,7 +113,7 @@ namespace Umbraco.Core.Composing
|
||||
|
||||
public static ILogger Logger
|
||||
=> _logger ?? (_logger = _factory?.TryGetInstance<ILogger>()
|
||||
?? new DebugDiagnosticsLogger());
|
||||
?? new DebugDiagnosticsLogger(new MessageTemplates()));
|
||||
|
||||
public static IProfiler Profiler
|
||||
=> _profiler ?? (_profiler = _factory?.TryGetInstance<IProfiler>()
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace Umbraco.Core.Logging
|
||||
/// <summary>
|
||||
/// Provides tools to support message templates.
|
||||
/// </summary>
|
||||
public static class MessageTemplates
|
||||
public class MessageTemplates : IMessageTemplates
|
||||
{
|
||||
// Umbraco now uses Message Templates (https://messagetemplates.org/) for logging, which means
|
||||
// we cannot plainly use string.Format() to format them. There is a work-in-progress C# lib,
|
||||
@@ -21,7 +21,7 @@ namespace Umbraco.Core.Logging
|
||||
|
||||
private static readonly Lazy<global::Serilog.ILogger> MinimalLogger = new Lazy<global::Serilog.ILogger>(() => new LoggerConfiguration().CreateLogger());
|
||||
|
||||
public static string Render(string messageTemplate, params object[] args)
|
||||
public string Render(string messageTemplate, params object[] args)
|
||||
{
|
||||
// by default, unless initialized otherwise, Log.Logger is SilentLogger which cannot bind message
|
||||
// templates. Log.Logger is set to a true Logger when initializing Umbraco's logger, but in case
|
||||
|
||||
@@ -572,13 +572,9 @@
|
||||
<Compile Include="IO\SystemDirectories.cs" />
|
||||
<Compile Include="IO\SystemFiles.cs" />
|
||||
<Compile Include="IO\ViewHelper.cs" />
|
||||
<Compile Include="Logging\DebugDiagnosticsLogger.cs" />
|
||||
<Compile Include="Logging\Serilog\SerilogLogger.cs" />
|
||||
<Compile Include="Logging\LoggingTaskExtension.cs" />
|
||||
<Compile Include="Logging\LogProfiler.cs" />
|
||||
<Compile Include="Logging\OwinLogger.cs" />
|
||||
<Compile Include="Logging\OwinLoggerFactory.cs" />
|
||||
<Compile Include="Logging\VoidProfiler.cs" />
|
||||
<Compile Include="MainDom.cs" />
|
||||
<Compile Include="Manifest\ManifestParser.cs" />
|
||||
<Compile Include="Manifest\ValueValidatorConverter.cs" />
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace Umbraco.Tests.Benchmarks
|
||||
[GlobalSetup]
|
||||
public void Setup()
|
||||
{
|
||||
var logger = new DebugDiagnosticsLogger();
|
||||
var logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
var path = TestHelper.CurrentAssemblyDirectory;
|
||||
|
||||
SetupSqlCe(path, logger);
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace Umbraco.Tests.Composing
|
||||
|
||||
private static IProfilingLogger GetTestProfilingLogger()
|
||||
{
|
||||
var logger = new DebugDiagnosticsLogger();
|
||||
var logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
var profiler = new TestProfiler();
|
||||
return new ProfilingLogger(logger, profiler);
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace Umbraco.Tests.Migrations
|
||||
[Test]
|
||||
public void CreateTableOfTDto()
|
||||
{
|
||||
var logger = new DebugDiagnosticsLogger();
|
||||
var logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
|
||||
var builder = Mock.Of<IMigrationBuilder>();
|
||||
Mock.Get(builder)
|
||||
@@ -53,7 +53,7 @@ namespace Umbraco.Tests.Migrations
|
||||
[Test]
|
||||
public void DeleteKeysAndIndexesOfTDto()
|
||||
{
|
||||
var logger = new DebugDiagnosticsLogger();
|
||||
var logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
|
||||
var builder = Mock.Of<IMigrationBuilder>();
|
||||
Mock.Get(builder)
|
||||
@@ -87,7 +87,7 @@ namespace Umbraco.Tests.Migrations
|
||||
[Test]
|
||||
public void CreateKeysAndIndexesOfTDto()
|
||||
{
|
||||
var logger = new DebugDiagnosticsLogger();
|
||||
var logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
|
||||
var builder = Mock.Of<IMigrationBuilder>();
|
||||
Mock.Get(builder)
|
||||
@@ -124,7 +124,7 @@ namespace Umbraco.Tests.Migrations
|
||||
[Test]
|
||||
public void CreateKeysAndIndexes()
|
||||
{
|
||||
var logger = new DebugDiagnosticsLogger();
|
||||
var logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
|
||||
var builder = Mock.Of<IMigrationBuilder>();
|
||||
Mock.Get(builder)
|
||||
@@ -161,7 +161,7 @@ namespace Umbraco.Tests.Migrations
|
||||
[Test]
|
||||
public void CreateColumn()
|
||||
{
|
||||
var logger = new DebugDiagnosticsLogger();
|
||||
var logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
|
||||
var builder = Mock.Of<IMigrationBuilder>();
|
||||
Mock.Get(builder)
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace Umbraco.Tests.Models
|
||||
var mediaTypeService = Mock.Of<IMediaTypeService>();
|
||||
var memberTypeService = Mock.Of<IMemberTypeService>();
|
||||
Composition.Register(_ => ServiceContext.CreatePartial(dataTypeService: dataTypeService, contentTypeBaseServiceProvider: new ContentTypeBaseServiceProvider(_contentTypeService, mediaTypeService, memberTypeService)));
|
||||
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -236,7 +236,7 @@ namespace Umbraco.Tests.Models
|
||||
|
||||
private static IProfilingLogger GetTestProfilingLogger()
|
||||
{
|
||||
var logger = new DebugDiagnosticsLogger();
|
||||
var logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
var profiler = new TestProfiler();
|
||||
return new ProfilingLogger(logger, profiler);
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ namespace Umbraco.Tests.Models
|
||||
|
||||
private static IProfilingLogger GetTestProfilingLogger()
|
||||
{
|
||||
var logger = new DebugDiagnosticsLogger();
|
||||
var logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
var profiler = new TestProfiler();
|
||||
return new ProfilingLogger(logger, profiler);
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ namespace Umbraco.Tests.Persistence.NPocoTests
|
||||
// create the db
|
||||
// prob not what we want, this is not a real database, but hey, the test is ignored anyways
|
||||
// we'll fix this when we have proper testing infrastructure
|
||||
var dbSqlServer = TestObjects.GetUmbracoSqlServerDatabase(new DebugDiagnosticsLogger());
|
||||
var dbSqlServer = TestObjects.GetUmbracoSqlServerDatabase(new DebugDiagnosticsLogger(new MessageTemplates()));
|
||||
|
||||
//drop the table
|
||||
dbSqlServer.Execute("DROP TABLE [umbracoServer]");
|
||||
|
||||
@@ -89,7 +89,7 @@ namespace Umbraco.Tests.Runtimes
|
||||
// test runtime
|
||||
public class TestRuntime : CoreRuntime
|
||||
{
|
||||
protected override ILogger GetLogger() => new DebugDiagnosticsLogger();
|
||||
protected override ILogger GetLogger() => new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
protected override IProfiler GetProfiler() => new TestProfiler();
|
||||
|
||||
// must override the database factory
|
||||
|
||||
@@ -56,7 +56,7 @@ namespace Umbraco.Tests.Runtimes
|
||||
// FIXME: we need a better management of settings here (and, true config files?)
|
||||
|
||||
// create the very basic and essential things we need
|
||||
var logger = new ConsoleLogger();
|
||||
var logger = new ConsoleLogger(new MessageTemplates());
|
||||
var profiler = new LogProfiler(logger);
|
||||
var profilingLogger = new ProfilingLogger(logger, profiler);
|
||||
var appCaches = new AppCaches(); // FIXME: has HttpRuntime stuff?
|
||||
@@ -244,7 +244,7 @@ namespace Umbraco.Tests.Runtimes
|
||||
// - assigning the factory to Current.Factory
|
||||
|
||||
// create the very basic and essential things we need
|
||||
var logger = new ConsoleLogger();
|
||||
var logger = new ConsoleLogger(new MessageTemplates());
|
||||
var profiler = Mock.Of<IProfiler>();
|
||||
var profilingLogger = new ProfilingLogger(logger, profiler);
|
||||
var appCaches = AppCaches.Disabled;
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
[OneTimeSetUp]
|
||||
public void InitializeFixture()
|
||||
{
|
||||
_logger = new DebugDiagnosticsLogger();
|
||||
_logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
[Timeout(4000)]
|
||||
public async Task ThreadResumeIssue()
|
||||
{
|
||||
var logger = new DebugDiagnosticsLogger();
|
||||
var logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
var runner = new BackgroundTaskRunner<IBackgroundTask>(new BackgroundTaskRunnerOptions { KeepAlive = true, LongRunning = true }, logger);
|
||||
var work = new ThreadResumeIssueWorkItem();
|
||||
runner.Add(work);
|
||||
@@ -76,7 +76,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
[Ignore("Only runs in the debugger.")]
|
||||
public async Task DebuggerInterferenceIssue()
|
||||
{
|
||||
var logger = new DebugDiagnosticsLogger();
|
||||
var logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
var runner = new BackgroundTaskRunner<IBackgroundTask>(new BackgroundTaskRunnerOptions { KeepAlive = true, LongRunning = true }, logger);
|
||||
var taskCompleted = false;
|
||||
runner.TaskCompleted += (sender, args) =>
|
||||
|
||||
@@ -47,7 +47,7 @@ namespace Umbraco.Tests.Services
|
||||
|
||||
private static IProfilingLogger GetTestProfilingLogger()
|
||||
{
|
||||
var logger = new DebugDiagnosticsLogger();
|
||||
var logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
var profiler = new TestProfiler();
|
||||
return new ProfilingLogger(logger, profiler);
|
||||
}
|
||||
@@ -268,7 +268,7 @@ namespace Umbraco.Tests.Services
|
||||
var tagRepo = new TagRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger);
|
||||
var commonRepository = new ContentTypeCommonRepository((IScopeAccessor)provider, tRepository, AppCaches);
|
||||
var languageRepository = new LanguageRepository((IScopeAccessor)provider, AppCaches.Disabled, Logger);
|
||||
var ctRepository = new ContentTypeRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, commonRepository, languageRepository);
|
||||
var ctRepository = new ContentTypeRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, commonRepository, languageRepository);
|
||||
var repository = new DocumentRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, ctRepository, tRepository, tagRepo, languageRepository);
|
||||
|
||||
// Act
|
||||
|
||||
@@ -60,7 +60,7 @@ namespace Umbraco.Tests.Services
|
||||
|
||||
private static IProfilingLogger GetTestProfilingLogger()
|
||||
{
|
||||
var logger = new DebugDiagnosticsLogger();
|
||||
var logger = new DebugDiagnosticsLogger(new MessageTemplates());
|
||||
var profiler = new TestProfiler();
|
||||
return new ProfilingLogger(logger, profiler);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,13 @@ namespace Umbraco.Tests.TestHelpers
|
||||
{
|
||||
public class ConsoleLogger : ILogger
|
||||
{
|
||||
private readonly IMessageTemplates _messageTemplates;
|
||||
|
||||
public ConsoleLogger(IMessageTemplates messageTemplates)
|
||||
{
|
||||
_messageTemplates = messageTemplates;
|
||||
}
|
||||
|
||||
public bool IsEnabled(Type reporting, LogLevel level)
|
||||
=> true;
|
||||
|
||||
@@ -27,13 +34,13 @@ namespace Umbraco.Tests.TestHelpers
|
||||
|
||||
public void Fatal(Type reporting, Exception exception, string messageTemplate, params object[] propertyValues)
|
||||
{
|
||||
Console.WriteLine("FATAL {0} - {1}", reporting.Name, MessageTemplates.Render(messageTemplate, propertyValues));
|
||||
Console.WriteLine("FATAL {0} - {1}", reporting.Name, _messageTemplates.Render(messageTemplate, propertyValues));
|
||||
Console.WriteLine(exception);
|
||||
}
|
||||
|
||||
public void Fatal(Type reporting, string messageTemplate, params object[] propertyValues)
|
||||
{
|
||||
Console.WriteLine("FATAL {0} - {1}", reporting.Name, MessageTemplates.Render(messageTemplate, propertyValues));
|
||||
Console.WriteLine("FATAL {0} - {1}", reporting.Name, _messageTemplates.Render(messageTemplate, propertyValues));
|
||||
}
|
||||
|
||||
public void Error(Type reporting, Exception exception, string message)
|
||||
@@ -55,13 +62,13 @@ namespace Umbraco.Tests.TestHelpers
|
||||
|
||||
public void Error(Type reporting, Exception exception, string messageTemplate, params object[] propertyValues)
|
||||
{
|
||||
Console.WriteLine("ERROR {0} - {1}", reporting.Name, MessageTemplates.Render(messageTemplate, propertyValues));
|
||||
Console.WriteLine("ERROR {0} - {1}", reporting.Name, _messageTemplates.Render(messageTemplate, propertyValues));
|
||||
Console.WriteLine(exception);
|
||||
}
|
||||
|
||||
public void Error(Type reporting, string messageTemplate, params object[] propertyValues)
|
||||
{
|
||||
Console.WriteLine("ERROR {0} - {1}", reporting.Name, MessageTemplates.Render(messageTemplate, propertyValues));
|
||||
Console.WriteLine("ERROR {0} - {1}", reporting.Name, _messageTemplates.Render(messageTemplate, propertyValues));
|
||||
}
|
||||
|
||||
public void Warn(Type reporting, string message)
|
||||
@@ -71,7 +78,7 @@ namespace Umbraco.Tests.TestHelpers
|
||||
|
||||
public void Warn(Type reporting, string message, params object[] propertyValues)
|
||||
{
|
||||
Console.WriteLine("WARN {0} - {1}", reporting.Name, MessageTemplates.Render(message, propertyValues));
|
||||
Console.WriteLine("WARN {0} - {1}", reporting.Name, _messageTemplates.Render(message, propertyValues));
|
||||
}
|
||||
|
||||
public void Warn(Type reporting, Exception exception, string message)
|
||||
@@ -82,13 +89,13 @@ namespace Umbraco.Tests.TestHelpers
|
||||
|
||||
public void Warn(Type reporting, Exception exception, string message, params object[] propertyValues)
|
||||
{
|
||||
Console.WriteLine("WARN {0} - {1}", reporting.Name, MessageTemplates.Render(message, propertyValues));
|
||||
Console.WriteLine("WARN {0} - {1}", reporting.Name, _messageTemplates.Render(message, propertyValues));
|
||||
Console.WriteLine(exception);
|
||||
}
|
||||
|
||||
public void Info(Type reporting, string messageTemplate, params object[] propertyValues)
|
||||
{
|
||||
Console.WriteLine("INFO {0} - {1}", reporting.Name, MessageTemplates.Render(messageTemplate, propertyValues));
|
||||
Console.WriteLine("INFO {0} - {1}", reporting.Name, _messageTemplates.Render(messageTemplate, propertyValues));
|
||||
}
|
||||
|
||||
public void Info(Type reporting, string message)
|
||||
@@ -103,7 +110,7 @@ namespace Umbraco.Tests.TestHelpers
|
||||
|
||||
public void Debug(Type reporting, string messageTemplate, params object[] propertyValues)
|
||||
{
|
||||
Console.WriteLine("DEBUG {0} - {1}", reporting.Name, MessageTemplates.Render(messageTemplate, propertyValues));
|
||||
Console.WriteLine("DEBUG {0} - {1}", reporting.Name, _messageTemplates.Render(messageTemplate, propertyValues));
|
||||
}
|
||||
|
||||
public void Verbose(Type reporting, string message)
|
||||
@@ -113,7 +120,7 @@ namespace Umbraco.Tests.TestHelpers
|
||||
|
||||
public void Verbose(Type reporting, string messageTemplate, params object[] propertyValues)
|
||||
{
|
||||
Console.WriteLine("VERBOSE {0} - {1}", reporting.Name, MessageTemplates.Render(messageTemplate, propertyValues));
|
||||
Console.WriteLine("VERBOSE {0} - {1}", reporting.Name, _messageTemplates.Render(messageTemplate, propertyValues));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,7 +190,7 @@ namespace Umbraco.Tests.Testing
|
||||
profiler = new LogProfiler(logger);
|
||||
break;
|
||||
case UmbracoTestOptions.Logger.Console:
|
||||
logger = new ConsoleLogger();
|
||||
logger = new ConsoleLogger(new MessageTemplates());
|
||||
profiler = new LogProfiler(logger);
|
||||
break;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user