【问题标题】:Can the log file path be changed on the fly (reguarly)可以动态更改日志文件路径(定期)
【发布时间】:2012-01-03 15:14:26
【问题描述】:

我一直在尝试使用 log4net,因为它似乎不支持我的项目需要的特定日志记录功能。 简而言之,我希望能够在代码中控制日志文件路径。 这个路径会不断变化。具体用例是一组文件系统观察者,每个实例都需要一个单独的日志文件。

这个可以吗?

我希望能够在代码中指定一个控制日志记录目标的变量。

例如:

var log4NetLogger1 = new Log4NetLogger("LogFileAppender1");

log4NetLogger1.InformationEvent("Log message 1");

var log4NetLogger2 = new Log4NetLogger("LogFileAppender2");

log4NetLogger2.InformationEvent("Log message 2");

在上面的示例中,我将一个字符串传递给 log4net 包装器,它与配置中的附加程序名称匹配。这个想法是 log4net 包装器通过 GetLogger 修改正在使用的附加程序来更改日志记录目标。

_log = log4net.LogManager.GetLogger(appenderName);

结果是创建了两个不同的日志文件,但日志消息同时写入了这两个文件。似乎 log4net 配置的某些方面是全局的,我无法以这种方式动态更改日志路径。

配置文件:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>

  <log4net>

    <root>
      <appender-ref ref="LogFileAppender1"/>
      <appender-ref ref="LogFileAppender2"/>
    </root>

    <appender name="LogFileAppender1" type="log4net.Appender.RollingFileAppender">
      <threshold value="INFO"/>
      <param name="File" value="C:\Tmp\EDP_TEST\LOG_DESTINATION\TestLog1.txt"/>
      <param name="AppendToFile" value="true"/>
      <rollingStyle value="Size"/>
      <maxSizeRollBackups value="10"/>
      <maximumFileSize value="10MB"/>
      <staticLogFileName value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n"/>
      </layout>
    </appender>

    <appender name="LogFileAppender2" type="log4net.Appender.RollingFileAppender">
      <threshold value="INFO"/>
      <param name="File" value="C:\Tmp\EDP_TEST\LOG_DESTINATION\TestLog2.txt"/>
      <param name="AppendToFile" value="true"/>
      <rollingStyle value="Size"/>
      <maxSizeRollBackups value="10"/>
      <maximumFileSize value="10MB"/>
      <staticLogFileName value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n"/>
      </layout>
    </appender>

  </log4net>

<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

完整的包装类:

using System;
using log4net;

namespace Log4NetRunner
{
    public enum LoggingLevel
    {
        Information,
        Warning,
        Error
    }

    public class Log4NetLogger
    {
        private readonly ILog _log;

        public Log4NetLogger(Type type)
        {
            if (_log == null)
            {
                _log = log4net.LogManager.GetLogger(type);
            }
        }

        public Log4NetLogger(string appenderName)
        {
            if (_log == null)
            {

                _log = log4net.LogManager.GetLogger(appenderName);
            }
        }

        public void FatalErrorEvent(string messageText)
        {
            SendLog(messageText, LoggingLevel.Error);
        }

        public void WarningEvent(string messageText)
        {
            SendLog(messageText, LoggingLevel.Warning);
        }

        public void InformationEvent(string messageText)
        {
            SendLog(messageText, LoggingLevel.Information);
        }

        private void SendLog(string messageText, LoggingLevel logLevel)
        {
            ILog logger = _log;

            switch (logLevel)
            {
                case LoggingLevel.Error:
                    logger.Error(messageText);
                    break;
                case LoggingLevel.Warning:
                    logger.Warn(messageText);
                    break;
                case LoggingLevel.Information:
                    logger.Info(messageText);
                    break;
                default:
                    logger.Error("Unknown Logging level: " + messageText);
                    break;
            }
        }
    }
}

【问题讨论】:

    标签: log4net


    【解决方案1】:

    可以,您只需要使用配置的记录器部分。

    http://www.beefycode.com/post/Log4Net-Tutorial-pt-5-Using-Logger-Objects.aspx

    <?xml version="1.0"?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
      </configSections>
    
      <log4net>
    
        <root>
          <!--<appender-ref ref="LogFileAppender1"/>
          <appender-ref ref="LogFileAppender2"/>-->
        </root>
    
        <logger name="Logger1">
          <level value="ALL" />
          <appender-ref ref="LogFileAppender1" />
        </logger>
    
        <logger name="Logger2">
          <level value="ALL" />
          <appender-ref ref="LogFileAppender2" />
        </logger>
    
        <appender name="LogFileAppender1" type="log4net.Appender.RollingFileAppender">
          <threshold value="INFO"/>
          <param name="File" value="C:\Tmp\EDP_TEST\LOG_DESTINATION\TestLog1.txt"/>
          <param name="AppendToFile" value="true"/>
          <rollingStyle value="Size"/>
          <maxSizeRollBackups value="10"/>
          <maximumFileSize value="10MB"/>
          <staticLogFileName value="true"/>
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n"/>
          </layout>
        </appender>
    
        <appender name="LogFileAppender2" type="log4net.Appender.RollingFileAppender">
          <threshold value="INFO"/>
          <param name="File" value="C:\Tmp\EDP_TEST\LOG_DESTINATION\TestLog2.txt"/>
          <param name="AppendToFile" value="true"/>
          <rollingStyle value="Size"/>
          <maxSizeRollBackups value="10"/>
          <maximumFileSize value="10MB"/>
          <staticLogFileName value="true"/>
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n"/>
          </layout>
        </appender>
    
      </log4net>
    
    <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      相关资源
      最近更新 更多