Как настроить log4net программно с нуля (никакая конфигурация)

Вот фрагмент кода, который работает для моего SCDA, должен быть очень похожим или давать подсказки о том, как этого добиться.

var slotLabelBuffer = default(VBuffer<ReadOnlyMemory<char>>);
transformedData.Schema["MessageNgrams"].GetSlotNames(ref slotLabelBuffer);

var slotLabels = new Dictionary<int, string>();
for (int i = 0; i < slotLabelBuffer.Length; i++)
   slotLabels.Add(i, slotLabelBuffer.GetItemOrDefault(i).ToString());

Индекс slotLabels соответствует вашему вектору с плавающей точкой.

84
задан John M Gant 20 April 2009 в 20:38
поделиться

5 ответов

Один из способов, которыми я занимался в прошлом, - это включить файл конфигурации в качестве встроенного ресурса и просто использовать его. log4net.Config.Configure (Stream) .

Таким образом, я мог использовать синтаксис конфигурации, с которым я был знаком, и мне не пришлось беспокоиться о развертывании файла.

36
ответ дан 24 November 2019 в 08:30
поделиться

Как говорит Джонатан , использование ресурса - это хорошее решение.

Это немного ограничение в том, что содержимое встроенного ресурса будет исправлено во время компиляции. У меня есть компонент ведения журнала, который генерирует XmlDocument с базовой конфигурацией Log4Net, используя переменные, определенные как appSettings (например, имя файла для RollingFileAppender, уровень ведения журнала по умолчанию, возможно, имя строки подключения, если вы хотите использовать AdoNetAppender). И затем я вызываю log4net.Config.XmlConfigurator.Configure для настройки Log4Net, используя корневой элемент сгенерированного XmlDocument.

Затем администраторы могут настроить «стандартную» конфигурацию, изменив несколько appSettings (обычно уровня, имя файла, ...) или можете указать внешний файл конфигурации, чтобы получить больше контроля.

5
ответ дан 24 November 2019 в 08:30
поделиться

Странно, что BasicConfigurator.Configure (apndr) не работал. В моем случае он выполнил свою работу ... Но, тем не менее, вот ответ - вы должны были написать hier.Configured = true; (код C #) после того, как закончили всю настройку.

0
ответ дан 24 November 2019 в 08:30
поделиться

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

using log4net;
using log4net.Repository.Hierarchy;
using log4net.Core;
using log4net.Appender;
using log4net.Layout;

namespace dnservices.logging
{
public class Logger
{
    private PatternLayout _layout = new PatternLayout();
    private const string LOG_PATTERN = "%d [%t] %-5p %m%n";

    public string DefaultPattern
    {
        get { return LOG_PATTERN; }
    }

    public Logger()
    {
        _layout.ConversionPattern = DefaultPattern;
        _layout.ActivateOptions();
    }

    public PatternLayout DefaultLayout
    {
        get { return _layout; }
    }

    public void AddAppender(IAppender appender)
    {
        Hierarchy hierarchy = 
            (Hierarchy)LogManager.GetRepository();

        hierarchy.Root.AddAppender(appender);
    }

    static Logger()
    {
        Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
        TraceAppender tracer = new TraceAppender();
        PatternLayout patternLayout = new PatternLayout();

        patternLayout.ConversionPattern = LOG_PATTERN;
        patternLayout.ActivateOptions();

        tracer.Layout = patternLayout;
        tracer.ActivateOptions();
        hierarchy.Root.AddAppender(tracer);

        RollingFileAppender roller = new RollingFileAppender();
        roller.Layout = patternLayout;
        roller.AppendToFile = true;
        roller.RollingStyle = RollingFileAppender.RollingMode.Size;
        roller.MaxSizeRollBackups = 4;
        roller.MaximumFileSize = "100KB";
        roller.StaticLogFileName = true;
        roller.File = "dnservices.txt";
        roller.ActivateOptions();
        hierarchy.Root.AddAppender(roller);

        hierarchy.Root.Level = Level.All;
        hierarchy.Configured = true;
    }

    public static ILog Create()
    {
        return LogManager.GetLogger("dnservices");
    }
}

}

121
ответ дан 24 November 2019 в 08:30
поделиться

I can't tell in the question's code snippet if the "'And so forth..." includes the very important apndr.ActivateOptions() which is indicated in Todd Stout's answer. Without ActivateOptions() the Appender is inactive and will not do anything which could explain why it is failing.

3
ответ дан 24 November 2019 в 08:30
поделиться
Другие вопросы по тегам:

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