У меня есть простой сервис ServiceStack с добавлением некоторых журналов.
log.Info("In Vehicle service request");
if (log.IsDebugEnabled)
log.Debug("Debugging Vehicle service request");
log определяется в базовом классе следующим образом:
public abstract class ServiceBase : Service
{
public static readonly ILog log = LogManager.GetLogger(typeof(ServiceBase));
}
Веб-хост настроен для добавления различных провайдеров журналов, включая log4net (ПРИМЕЧАНИЕ. Я пробовал другие = та же проблема).
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables(); //lets Azure portal override settings
context.Configuration = config.Build();
})
.ConfigureLogging((hostingContext, logging) =>
{
logging.ClearProviders();
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();
logging.AddAzureWebAppDiagnostics();
// The ILoggingBuilder minimum level determines the
// the lowest possible level for logging. The log4net
// level then sets the level that we actually log at.
logging.AddLog4Net();
//logging.SetMinimumLevel(LogLevel.Debug);
})
.UseAzureAppServices()
.UseStartup<Startup>();
ServiceStack AppHost заранее устанавливает LogFactory следующим образом:
public override void Configure(Container container)
{
//Also runs log4net.Config.XmlConfigurator.Configure()
LogManager.LogFactory = new Log4NetFactory(configureLog4Net: true);
..etc
Что происходит?
Я получаю прекрасное ведение журнала, если добавляю их в свой автозапуск. Однако регистрация в службе ServiceStack не отображается при размещении в Azure. Я получаю логирование при локальном запуске.
Итак, NetCore регистрируется нормально, но все в классе Service - нет!
Почему бы не войти с этим?
public async Task<GetMyDataResponse> Any(GetMyData request)
{
log.Info("In service request");
if (log.IsDebugEnabled)
log.Debug("Debugging service request");
//Some request validation logic could/should go here.
return new GetMyDataResponse
{
Results = await _myDataRepo.FetchAsync()
};
}