编辑:我收回它,我的代码中有一个错误,一旦修复了它,它就可以。该代码现在已更新为工作版本。错误是在ThreadContext.Properties[KEY_LOG_FOLDER] = loggerName;
中,并且 ThreadContext.Properties[KEY_LOG_FILE] = loggerName;
。我不小心将"KEY_LOG_FOLDER"
和"KEY_LOG_FILE"
放在引号中,它们应该是其他地方定义的constring。
我试图每个连接都有一个滚动文件appender。连接动态进入,无法在启动时确定。目前,我正在尝试以下操作:
XML:
<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");
}
但是,当它全部快速执行时,这似乎不起作用。
我应该通过编程性地创建每个连接的附录,还是不良练习?
i认为,该文件名仅设置一次,因此并非每次记录时。如果您想要不同的文件名,则可以在您的问题中动态为每个文件制作不同的记录仪。