log4net регистрирует сообщение во всех приложениях (/ все файлы) - PullRequest
0 голосов
/ 25 октября 2019

У меня проблемы с тем, как log4net управляет приложениями и сообщениями этим приложениям.

Когда я записываю 1 сообщение в 1 регистратор (что соответствует 1 приложению), сообщение остается в журнале ALL. файлы (таким образом сообщение, похоже, отправляется ВСЕМ приложениям)

Что я делаю не так?!

Мне удалось воспроизвести мою проблему в модульном тесте:

    [Test]
    public void Test()
    {
        var hierarchy = (Hierarchy)LogManager.GetRepository();

        var patternLayout = new PatternLayout
        {
            ConversionPattern = "%date %level %logger - %message%newline" //CreateLayoutPattern(appenderConfiguration.Layout),
        };
        patternLayout.ActivateOptions();

        hierarchy.Configured = true;
        for (var i = 1; i < 10; i++)
        {
            var logFile = Path.Combine(_testLogFolder, $"SomeLog_Test{i}.csv");

            var roller = new RollingFileAppender
            {
                Name = $"Test{i}",
                AppendToFile = true,
                File = logFile,
                CountDirection = 1,
                Layout = patternLayout,
                ImmediateFlush = true,
                // MaxSizeRollBackups is set to max int, software will have an independent mechanism in place (reaper) to clean up old files
                MaxSizeRollBackups = int.MaxValue,
                MaximumFileSize = "1MB",
                RollingStyle = RollingFileAppender.RollingMode.Size,
                StaticLogFileName = false,
                PreserveLogFileNameExtension = true,
                Threshold = Level.All
            };

            roller.ActivateOptions();
            hierarchy.Root.AddAppender(roller);
        }

        // A
        LogManager.GetLogger("Test1").Info("Whatever");

        // Now the ALL of the log files contain the message "Whatever", why?!?! I only logged to 'Test1'
    }

1 Ответ

0 голосов
/ 25 октября 2019

Очевидно, это поведение по умолчанию (что имеет смысл, когда я думаю об этом немного дольше :)).

То, что мне нужно, достижимо. Вместо того, чтобы добавлять все приложения в hierarchy.Root.AddAppender, мне пришлось создать регистратор для каждого имени приложения, а затем добавить ролик в этот регистратор. Например:

var logger = hierarchy.GetLogger("Test1", hierarchy.LoggerFactory);

logger.AddAppender(roller);
logger.Level = Level.All;
logger.Additivity = false;

И удалить:

hierarchy.Root.AddAppender(roller);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...