Как я использую свойство GlobalContext на имя log4net appender?

Похоже, что правильной терминологией является «Горячая замена модуля» (MHR - AKA «Живая перезагрузка» или «Горячие обновления / перезагрузка»). После этого ответа я получил часть пути:

https://stackoverflow.com/a/50934814/1236397

Отсутствующая часть была найдена здесь: https://github.com/aspnet/JavaScriptServices/issues/1654#issuecomment-430053872

Кажется, что обе эти ссылки предполагают, что шаблон Visual Studio создается в готовом для производства, а не в разработке. Две проблемы:

  1. Папка ClientApp\dist может быть создана в какой-то момент, если вы создаете вне Visual Studio. Наличие созданной вручную папки dist нарушит текущую перезагрузку. Эта папка должна быть полностью удалена.
  2. Шаблон VS ASP.Net Core Angular CLI готов для обслуживания статических файлов в производственном режиме. Создателю шаблона не удалось обернуть разделы для предотвращения загрузки в режиме разработки.

Для # 2 измените эти строки:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

...

public IConfiguration Configuration { get; }

...

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddSpaStaticFiles(configuration =>
    {
        configuration.RootPath = "ClientApp/dist";
    });
    ...
}

...

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    app.UseSpaStaticFiles();
    ...
}

на эту:

public Startup(IHostingEnvironment env, IConfiguration configuration)
{
    HostingEnvironment = env;
    Configuration = configuration;
}

...

public IHostingEnvironment HostingEnvironment { get; private set; }
public IConfiguration Configuration { get; }

...

public void ConfigureServices(IServiceCollection services)
{
    ...
    if (HostingEnvironment.IsProduction())
    {
        // In production, the Angular files will be served from this directory
        services.AddSpaStaticFiles(configuration =>
        {
            configuration.RootPath = "ClientApp/dist";
        });
    }
    ...
}

...

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    if (env.IsProduction())
    {
        app.UseSpaStaticFiles();
    }
    ...
}

Однако на этом этапе страницы обновляются полностью. Это потому, что HMR не включен по умолчанию. Вам нужно будет следовать соответствующей документации здесь:

https://github.com/angular/angular-cli/wiki/stories-configure-hmr

Если ссылка вообще не работает, просто найдите документацию, используя запрос configure HMR for angular CLI.

Подсказка: Если вам нужна поддержка IE9-11, взгляните на файл polyfills.ts и игнорируйте строку import 'classlist.js', если она вам не нужна (в противном случае запустите npm install --save classlist.js).

40
задан Anthony Mastrean 5 March 2013 в 14:24
поделиться

4 ответа

Я столкнулся с тем же поведением и решил его путем установки глобальной переменной прежде, чем назвать XmlConfigurator... Вот то, что я успешно использую:

детали log4net.config:

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
  <File type="log4net.Util.PatternString" value="App_Data/%property{LogName}" />
  ...
</appender>

детали Global.asax:

private static readonly log4net.ILog log = log4net.LogManager.GetLogger("Global.asax");
void Application_Start(object sender, EventArgs e) 
{
    // Set logfile name and application name variables
    log4net.GlobalContext.Properties["LogName"] = GetType().Assembly.GetName().Name + ".log";
    log4net.GlobalContext.Properties["ApplicationName"] = GetType().Assembly.GetName().Name;

    // Load log4net configuration
    System.IO.FileInfo logfile = new System.IO.FileInfo(Server.MapPath("log4net.config"));
    log4net.Config.XmlConfigurator.ConfigureAndWatch(logfile);

    // Record application startup
    log.Debug("Application startup");
}

Hope это помогает...

57
ответ дан Dscoduc 27 November 2019 в 01:33
поделиться

Регистратор был инициализирован через глобальный или основной метод в приложении? Могло случиться так, что GlobalContext не был, инициализируют все же.

1
ответ дан Dillie-O 27 November 2019 в 01:33
поделиться

Добавить тип = log4net.Util.PatternString в элемент File

16
ответ дан 27 November 2019 в 01:33
поделиться

В JavaScript я переписываю каждую функцию так, чтобы она могла завершиться как можно скорее. Вы хотите, чтобы браузер снова контролировал вас, чтобы он мог вносить изменения в вашу DOM.

Каждый раз, когда мне хотелось спать в середине моей функции, я реорганизовывал использование setTimeout () .

] Я собираюсь отредактировать этот ответ, потому что я нашел его полезным:

Печально известная функция сна или задержки в любом языке очень обсуждается. Некоторые скажут, что всегда должен быть сигнал или обратный вызов для запуска данной функции, другие будут утверждать, что иногда полезен произвольный момент задержки. Я говорю, что у каждого свое, и одно правило никогда ничего не может диктовать в этой отрасли.

Написать функцию сна просто и сделать ее еще более удобной с помощью JavaScript Promises: а затем в Application_Start выполните:

void Application_Start(object sender, EventArgs e) 
{
    // Set logfile name and application name variables
    log4net.GlobalContext.Properties["LogName"] = GetType().Assembly.GetName().Name + ".log";
    log4net.GlobalContext.Properties["ApplicationName"] = GetType().Assembly.GetName().Name;

    // Load log4net configuration
    System.IO.FileInfo logfile = new System.IO.FileInfo(Server.MapPath("log4net.config"));
    log4net.Config.XmlConfigurator.ConfigureAndWatch(logfile);

    //Get the loger
    _pLog = log4net.LogManager.GetLogger("Global.asax");

    // Record application startup
    pLog .Debug("Application startup");
}

Итак, последовательность такова:

// Set logfile name and application name variables
// Load log4net configuration
// get the logger
// Record application startup
4
ответ дан 27 November 2019 в 01:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: