Программно добавляя и удаляя журнал appenders в log4net

Обновление 26 сентября 2016 года:

Как следует из ответа Тейтай, вместо установок «типизации», которые мы использовали несколько месяцев назад, теперь мы можем использовать:

npm install --save @types/lodash

Вот некоторые дополнительные ссылки, поддерживающие этот ответ:

Если вы все еще используете установку типирования, см. комментарии ниже (другими) относительно '' '--ambient' '' и '' '--global' ''.

Также, в новом Quick Start, config больше не находится в index.html; теперь он находится в systemjs.config.ts (если используется SystemJS).

Исходный ответ:

Это сработало на моем mac (после установки Angular 2 в соответствии с Быстрый старт ):

sudo npm install typings --global
npm install lodash --save 
typings install lodash --ambient --save

Вы можете найти различные файлы, например

  • /typings/main.d.ts
  • / typings. json
  • /package.json

Угловая 2 Quickstart использует System.js, поэтому я добавил «map» в config в index.html следующим образом:

System.config({
    packages: {
      app: {
        format: 'register',
        defaultExtension: 'js'
      }
    },
    map: {
      lodash: 'node_modules/lodash/lodash.js'
    }
  });

Тогда в моем .ts-коде мне удалось:

import _ from 'lodash';

console.log('lodash version:', _.VERSION);

Редактирование с середины 2016 года:

Поскольку @tibbus упоминает, в некоторых контекстах , вам нужно:

import * as _ from 'lodash';

Если вы начинаете с angular2-seed , и если вы не хотите импортировать каждый раз, вы можете пропустить карту и импортировать шаги и просто uncomment lodash line в tools / config / project.config.ts.

Чтобы мои тесты работали с lodash, мне также пришлось добавить строку в массив файлов в файле karma.conf.js:

'node_modules/lodash/lodash.js',

23
задан Pete 5 October 2009 в 12:14
поделиться

2 ответа

Я использовал BasicConfigurator , сконфигурированный с MemoryAppender . Это приложение позволяет вам получить доступ к сообщениям в памяти, записанным во время теста.

11
ответ дан 29 November 2019 в 02:25
поделиться

Следующий код был первоначально найден в архивах списков рассылки apache и должен решить проблему добавления и удаления дополнений log4net в коде

/// <summary>
/// dataLog
/// </summary>
protected static readonly IDeviceCommunicationsLog dataLog =
DeviceCommunicationsLogManager.GetLogger("LIS3.Data");


Each connection adds and removes a file appender programmatically:

/// <summary>
/// add connection specific appender
/// </summary>
void AddAppender()
{
    // check if logging is endabled
    if( this.IsLoggingEnabled() )
    {
        try
        {
            // get the interface
            IAppenderAttachable connectionAppender = (IAppenderAttachable)this.DataLog.Logger;
            // need some application configuration settings
            NameValueCollection appSettings = ConfigurationSettings.AppSettings;
            // get the layout string
            string log4netLayoutString = appSettings["log4net.LIS3.LayoutString"];
            if( log4netLayoutString == null )
            {
                // use default setting
                log4netLayoutString = "%d [%x]%n   %m%n  %P MessageData}%n%n";
            }
            // get logging path
            string log4netPath = appSettings["log4net.Path"];
            if( log4netPath == null )
            {
                // use default path
                log4netPath = ".\\";
            }
            // create the appender
            this.rollingFileAppender = new RollingFileAppender();
            // setup the appender
            this.rollingFileAppender.MaxFileSize = 10000000;
            this.rollingFileAppender.MaxSizeRollBackups = 2;
            this.rollingFileAppender.RollingStyle =   RollingFileAppender.RollingMode.Size;
            this.rollingFileAppender.StaticLogFileName = true;
            string appenderPath = LogSourceName + ".log";
            // log source name may have a colon - if soreplace with underscore
            appenderPath = appenderPath.Replace( ':', '_' );
            // now add to log4net path
            appenderPath = Path.Combine( log4netPath, appenderPath );
            // update file property of appender
            this.rollingFileAppender.File = appenderPath;
            // add the layout
            PatternLayout patternLayout = new PatternLayout(   log4netLayoutString );
            this.rollingFileAppender.Layout = patternLayout;
            // add the filter for the log source
            NDCFilter sourceFilter = new NDCFilter();
            sourceFilter.StringToMatch = this.LogSourceName;
            this.rollingFileAppender.AddFilter( sourceFilter);
            // now add the deny all filter to end of the chain
            DenyAllFilter denyAllFilter = new DenyAllFilter();
            this.rollingFileAppender.AddFilter( denyAllFilter );
            // activate the options
            this.rollingFileAppender.ActivateOptions();
            // add the appender
            connectionAppender.AddAppender( this.rollingFileAppender );
        }
        catch( Exception x )
        {
            this.ErrorLog.Error( "Error creating LIS3 data log appender for " + LogSourceName, x );
        }
    }
}
/// <summary>
/// remove connection specific appender
/// </summary>
void RemoveAppender()
{
    // check if we have one
    if( this.rollingFileAppender != null )
    {
        // cast to required interface
        IAppenderAttachable connectionAppender = (IAppenderAttachable)this.DataLog.Logger;
        // remove the appendier
        connectionAppender.RemoveAppender( rollingFileAppender );
        // set to null
        this.rollingFileAppender = null;
    }
}
3
ответ дан armannvg 29 November 2019 в 02:25
поделиться
Другие вопросы по тегам:

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