tcp通道连接后,log4net正在写入不正确的文件

问题描述

我正在使用一个多项目解决方案,包括一个客户端和一个服务器以及一个用于log4net的项目。我正在尝试为客户端,服务器配置一个单独的日志文件,并为要写入的所有其他项目配置一个认”文件。由于某种原因,服务器开始写入其自己的日志文件,但是在首次通过TCP双工与客户端联系之后,服务器会切换并专门写入文件

所有项目使用的logger类:

public class Logger
{
   private static LogInstance _logger;
   public static LogInstance Instance => _logger ?? (_logger = new LogInstance("DefaultLogger"));

   private static LogInstance _clientLogger;
   public static LogInstance ClientInstance => _clientLogger ?? (_clientLogger = new LogInstance("ClientLogger"));

   private static LogInstance _serverLogger;
   public static LogInstance ServerInstance => _serverLogger ?? (_serverLogger = new LogInstance("ServerLogger"));

}

public class LogInstance
{
   private static ILog Log;

   public LogInstance(string loggerName)
   {
      Log = LogManager.GetLogger(loggerName);
   }

   /**Removed the Warning(),Debug(),and Info() messages for space; they function identically to Error() with string input instead of Exception**/
   public void Error(Exception ex,[CallerMemberName] string memberName = "",[CallerFilePath] string sourceFilePath = "",[CallerLineNumber] int sourceLineNumber = 0)
   {
      if (Log.IsErrorEnabled)
      {
         Log.Error($"Error logged from method {memberName} in file {sourceFilePath} at line {sourceLineNumber}",ex);
      }
   }
}

我的log4net配置:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
  </appSettings>
  <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add name="textWriterTraceListener"
            type="System.Diagnostics.TextWriterTraceListener"
            initializeData="C:\tmp\log4net.txt" />
      </listeners>
    </trace>
  </system.diagnostics>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

  <log4net>
    <root>
      <!--<level value="DEBUG" />-->
      <level value="ALL" />
    </root>

    <logger name="DefaultLogger">
      <appender name="DefaultAppender" type="log4net.Appender.RollingFileAppender">
        <file value="${ProgramData}\[redacted]\logging\default.log" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value="'.'yyyyMMdd'.log'" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date %-5level - %message%newline" />
        </layout>
      </appender>
    </logger>

    <logger name="ServerLogger">
      <appender name="ServerAppender" type="log4net.Appender.RollingFileAppender">
        <file value="${ProgramData}\[redacted]\logging\server.log" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value="'.'yyyyMMdd'.log'" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date %-5level - %message%newline" />
        </layout>
      </appender>
    </logger>

    <logger name="ClientLogger">
      <appender name="ClientAppender" type="log4net.Appender.RollingFileAppender">
        <file value="${ProgramData}\[redacted]\logging\client.log" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value="'.'yyyyMMdd'.log'" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date %-5level - %message%newline" />
        </layout>
      </appender>
    </logger>
  </log4net>
</configuration>

服务器日志文件的示例:

2020-10-27 12:55:52,507调试-方法中的信息输入 第29行的文件Server \ App.xaml.cs中的ApplicationStart:日志记录为 启用。

2020-10-27 12:55:53,112调试-从文件中的方法启动中调试条目 第64行的Server \ Services \ ServerController.cs:服务器附加的输入 频道。

认的日志文件(最初仅由Data项目使用,但是在连接输入通道后包括服务器日志):

2020-10-27 12:55:53,853调试-从方法GetAllRoles中的调试条目 第313行的文件Data \ Security \ SecurityDataHandler.cs:所有角色均为 检索到。

2020-10-27 12:55:53,903调试-方法中的调试项 文件Data \ Security \ SecurityDataHandler.cs中的IsValidRetrievedRole位于 第507行:已检索到角色Admin。

2020-10-27 12:55:53,934调试-来自方法GetAllUsers中的调试条目 第401行的文件Data \ Security \ SecurityDataHandler.cs:所有用户 检索到。

2020-10-27 12:56:00,080调试-方法中的调试项 文件Data \ Datalogging \ DatalogDataHandler.cs中的AddEntryToDatabase位于 第28行:添加了数据日志条目326。

2020-10-27 12:56:00,113调试-方法中的调试项 Data \ Datalogging \ DatalogDataHandler.cs文件中的AddEntryValuesForEntry 在第69行:为条目326添加了8个值。

2020-10-27 12:56:38,943调试-方法StopServices的调试项 在文件Server \ Models \ ServerMainDataModel.cs中的第182行:停止所有 服务和渠道。

2020-10-27 12:56:39,000错误-方法记录错误 文件中的RetrieveSNowDepth 第75行的Server \ Services \ MapServices \ SNowDepthManager.cs

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)