log4net вход в разные файлы - PullRequest
3 голосов
/ 26 июля 2011

Два экземпляра одной и той же программы настроены для входа в отдельные файлы, вот мой log4net.config:

<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%utcdate] %-5level %logger: %message%newline%exception"/>
    </layout>
  </appender>

  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="Log/svc-%property{ServiceName}"/>
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <datePattern value="'-'yyyy'-'MM'-'dd'.log'"/>
    <staticLogFileName value="false"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%utcdate] %-5level %logger: %message%newline%exception"/>
    </layout>
  </appender>

 <root>
    <level value="DEBUG"/>
    <appender-ref ref="ConsoleAppender"/>
    <appender-ref ref="RollingFileAppender"/>
  </root>
</log4net>

А вот как я копирую логи:

    log = LogManager.GetLogger(ServiceName);
    GlobalContext.Properties["ServiceName"] = ServiceName;
    XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));

Теперь службы называются такими вещами, как «Сервис1», «Сервис10», «Сервис2».

Когда я запускаю службы 1 и 10, с которыми я тестирую, они оба создают свои файлы журнала:

svc-BettweenSvc1-2011-07-26.log
svc-BettweenSvc10-2011-07-26.log

Но когда запускается вторая служба, журналы с первого начинают добавляться ко второму журналу, и тот больше не используется.

Как я могу правильно разделить файлы журналов в службах Windows, используя log4net?

Ответы [ 2 ]

0 голосов
/ 27 июля 2011

Для справки, это работает, но это не то, против чего я тестирую, это все еще не работает в моем сервисе, я просто опубликую это, чтобы, надеюсь, помочь другим, хотя:

namespace log4netMultiLogTester
{
    public static class Program
    {
        public static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Process.Start(new ProcessStartInfo("log4netMultiLogTester.exe", "testApp1"));
                Process.Start(new ProcessStartInfo("log4netMultiLogTester.exe", "testApp2"));
            }
            else
            {
                var logId = args[0];
                var log = LogManager.GetLogger(logId);

                GlobalContext.Properties["ServiceName"] = logId;
                XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));

                log.Info("Starting log: {0}".FormatWith(logId));

                do
                {
                    log.Info("Log: {0}, latest entry is {1}".FormatWith(logId,DateTime.Now.Ticks));
                } while (Console.ReadKey().Key != ConsoleKey.R);
            }
        }
    }

    public static class StringExtensions
    {
        public static string FormatWith(this string text,params object[] args)
        {
            return string.Format(text, args);
        }
    }
}
<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%utcdate] %-5level %logger: %message%newline%exception"/>
    </layout>
  </appender>

  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="Log/svc-%property{ServiceName}"/>
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <datePattern value="'-'yyyy'-'MM'-'dd'.log'"/>
    <staticLogFileName value="false"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%utcdate] %-5level %logger: %message%newline%exception"/>
    </layout>
  </appender>

 <root>
    <level value="DEBUG"/>
    <appender-ref ref="ConsoleAppender"/>
    <appender-ref ref="RollingFileAppender"/>
  </root>
</log4net>
0 голосов
/ 26 июля 2011

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

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

Извините, я не могу больше помочь, сейчас я борюсь с почти той же проблемой (среди других, более неотложных).

Удачи!

edit: проверьте этот вопрос / ответ для возможного решения: how-to-stop-log4net-from-write-to-two-Отдельные файлы

...