Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
log4net每个连接都有appender_Log4net - Fatal编程技术网

log4net每个连接都有appender

log4net每个连接都有appender,log4net,Log4net,编辑:我收回它,我的代码中有一个错误,一旦我修复了它,它就工作了。代码现在更新为工作版本。 错误出现在ThreadContext.Properties[KEY\u LOG\u FOLDER]=loggerName和 ThreadContext.Properties[KEY\u LOG\u FILE]=loggerName。我不小心把“KEY\u LOG\u FOLDER”和“KEY\u LOG\u FILE”放在引号中,它们应该是在别处定义的常量字符串 我正在尝试为每个连接使用一个滚动文件追加器

编辑:我收回它,我的代码中有一个错误,一旦我修复了它,它就工作了。代码现在更新为工作版本。 错误出现在
ThreadContext.Properties[KEY\u LOG\u FOLDER]=loggerName
ThreadContext.Properties[KEY\u LOG\u FILE]=loggerName。我不小心把
“KEY\u LOG\u FOLDER”
“KEY\u LOG\u FILE”
放在引号中,它们应该是在别处定义的常量字符串

我正在尝试为每个连接使用一个滚动文件追加器。连接动态进入,无法在启动时确定。目前,我正在尝试以下方法:

XML:

然而,当所有这些都快速执行时,这似乎不起作用


我应该以编程方式为每个连接创建appender,还是这是一种糟糕的做法?

我认为文件名只设置了一次,所以不是每次登录时都打开。如果您想要不同的文件名,可以根据您在问题中提出的建议,为每个文件动态设置不同的记录器。

我相信文件名只设置一次,所以不是每次登录时都打开。如果您想要不同的文件名,可以根据您在问题中提出的建议,为每个文件动态创建不同的记录器

<log4net>
  <logger name="Connection.CommunicationLogger">
    <appender-ref ref="ConnectionCommunicationFileAppender"/>
    <level value="ALL"/>
  </logger>

  <appender name="ConnectionCommunicationFileAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="C:\logs\%property{LogFolder}\%property{LogName}.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="100KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date:  %message%newline" />
    </layout>
  </appender>
</log4net>
public FileLogger(string loggerName)
{
    string logsDir = ConfigurationManager.AppSettings["LogRootDirectory"];
    System.IO.Directory.CreateDirectory(logsDir + "\\" + loggerName);

    ILoggerRepository loggerRepository = LogManager.CreateRepository(loggerName + REPOSITORY);

    ThreadContext.Properties[KEY_LOG_FOLDER] = loggerName;
    ThreadContext.Properties[KEY_LOG_FILE] = loggerName; 

    log4net.Config.XmlConfigurator.Configure(loggerRepository);
    logger = LogManager.GetLogger(loggerName + REPOSITORY, "Connection.CommunicationLogger");
}