开发者

log4net logging in different files

开发者 https://www.devze.com 2023-03-23 14:38 出处:网络
Two instances of the same program are configured to log in separate files, here is my log4net.config:

Two instances of the same program are configured to log in separate files, here is my 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>开发者_StackOverflow

  <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>

And here's how I instance the logs:

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

Now, the services are called stuff like "Service1" "Service10" "Service2".

When I start services 1 and 10, the ones I'm testing with, they both create their log files:

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

But when the second service is started, the logs from the first one start being appended to the second log, and that one is no longer used.

How can I log to separate log files properly in windows services using log4net?


I believe the problem is that you only have one log4net Repository configured (most likely the default one). When you change the log4net log file name, therefore, all loggers start logging to the new file name.

I believe that you will need to configure separate repositories for each separate log file you want active at the same time.

I'm sorry I can't help more, I'm struggling with almost the same issue right now (among other, more pressing, issues).

Good luck!

edit: check out this question/answer for a possible solution: how-to-stop-log4net-from-writing-to-two-separate-files


For the record, this works, but it's not what I'm testing against, it still doesn't work in my service, I'll just post it to hopefully help others though:

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号