Я думаю, что вы не должны вызывать _logger в пользовательском логгере.
Это будет циклический вызов во время выполнения, и результатом будет "префикс: префикс: префикс: префикс: префикс: префикс: префикс: ..."
Проще говоря, вы можетесоздайте простой регистратор и внедрите средство записи журналов, такое как консоль, средство записи базы данных, log4net, ...
Теперь, во-первых, вы должны изменить свой собственный регистратор, как показано ниже:
public class CustomLogger : ILogger
{
private readonly string CategoryName;
private readonly string _logPrefix;
public CustomLogger(string categoryName, string logPrefix)
{
CategoryName = categoryName;
_logPrefix = logPrefix;
}
public IDisposable BeginScope<TState>(TState state)
{
return new NoopDisposable();
}
public bool IsEnabled(LogLevel logLevel)
{
return true;
}
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
string message = _logPrefix;
if (formatter != null)
{
message += formatter(state, exception);
}
// Implement log writter as you want. I am using Console
Console.WriteLine($"{logLevel.ToString()} - {eventId.Id} - {CategoryName} - {message}");
}
private class NoopDisposable : IDisposable
{
public void Dispose()
{
}
}
}
Второйшаг, создайте регистратор провайдера:
public class LoggerProvider : ILoggerProvider
{
public ILogger CreateLogger(string categoryName)
{
return new CustomLogger(categoryName, "This is prefix: ");
}
public void Dispose()
{
}
}
Третий шаг, в Configure from Startup.cs:
loggerFactory.AddProvider(new MicroserviceLoggerProvider());