Sudheer Kumar Tiwari Ответов: 1

Невозможно записать журнал с помощью log4net в другой файл-2


Я пишу журнал с помощью log4net и пишу отдельный файл для исключения и информации.
Но когда я пишу какое-либо исключение, оно записывается в оба файла. он должен регистрироваться только в файле ошибок, а не в обоих файлах
Ниже приведен мой конфигурационный файл :
<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

  <log4net debug="true">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value=".\Log\ChatLog.log" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <filter type="log4net.Filter.LevelRangeFilter">
          <levelMin value="INFO" />
          <levelMin value="DEBUG" />
        </filter>
        <conversionPattern value="%level %username %message%newline" />
      </layout>
    </appender>

    <appender name="RollingErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value=".\Log\ErrorLog.log" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <filter type="log4net.Filter.LevelRangeFilter">
          <levelMin value="ERROR" />
          <levelMin value="WARNING" />
          <levelMax value="FATAL" />
        </filter>
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingLogFileAppender" />
      <appender-ref ref="RollingErrorLogFileAppender" />
    </root>
  </log4net>


------------------ А код за этим стоит ---------------
public static class ChatLogger
    {
        /// <summary>
        /// Enum for Log Type
        /// </summary>
        public enum LoggerType
        {
            Errorlog,
            Debuglog,
            Warninglog,
            Infolog,
            Fatellog
        }
        private static readonly ILog chatlog = LogManager.GetLogger("RollingLogFileAppender");
        private static readonly ILog errorlogs = LogManager.GetLogger("RollingErrorLogFileAppender");
        /// <summary>
        /// main method to log
        /// </summary>
        /// <param name="logMsg">log message</param>
        /// <param name="logType">log type</param>
        public static async Task WriteLog(string logMsg, string logType)
        {
            try
            {
                if (Convert.ToBoolean(ConfigurationManager.AppSettings["IsLogEnabled"].Trim()))
                {
                    log4net.Config.XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/Web.config")));  // Web version
                    switch (logType)
                    {
                        case "Debuglog":
                            await Task.Run(() => chatlog.Debug(logMsg));
                            break;
                        case "Errorlog":
                            string errorlog = logMsg.Length > 500 ? logMsg.Substring(0, 500) : logMsg;
                            await Task.Run(() => errorlogs.Error(errorlog));
                            break;
                        case "Warninglog":
                            string warnlog = logMsg.Length > 500 ? logMsg.Substring(0, 500) : logMsg;
                            await Task.Run(() => chatlog.Warn(warnlog));
                            break;
                        case "Infolog":
                            await Task.Run(() => chatlog.Info(logMsg));
                            break;
                        case "Fatellog":
                            string fatallog = logMsg.Length > 500 ? logMsg.Substring(0, 500) : logMsg;
                            await Task.Run(() => chatlog.Fatal(fatallog));
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                await Task.Run(() => chatlog.Error(ex.StackTrace.Length > 500 ? ex.StackTrace.Substring(0, 500) : ex.StackTrace));
            }
        }

---------------
Пожалуйста, скажите мне, какую настройку или код я упускаю.
Спасибо
Садила

Что я уже пробовал:

я перепробовал все настройки .
Please tell me what setting or code i am missing.

1 Ответов

Рейтинг:
4

Member 11242733

Вы должны добавить пороговое значение в свой аппендер

<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="%property{logPath}\Error.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <datePattern value="'_'yyyy.MM.dd'.txt'" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="10MB" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date] (ID: %3thread) - %-5level %logger: %message%newline" />
    </layout>
    <threshold value="ERROR" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>