2017-08-30 122 views
0

編輯:我收回,我有我的代碼中的錯誤,一旦我修好了,它的工作原理。代碼現在更新爲工作版本。 錯誤發生在ThreadContext.Properties[KEY_LOG_FOLDER] = loggerName;ThreadContext.Properties[KEY_LOG_FILE] = loggerName;。我不小心把"KEY_LOG_FOLDER""KEY_LOG_FILE"放在引號中,它們應該是其他地方定義的常量字符串。log4net有每個連接appender

我想每個連接都有一個滾動文件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"); 
} 

然而,這似乎並沒有當這一切都執行迅速開展工作。

我應該以編程方式爲每個連接創建appender,否則這將是不好的做法?

回答

2

我相信文件名只會設置一次,所以不會每次登錄。如果你想要不同的文件名,一個選項可以動態地爲每個文件創建不同的記錄器,就像你在你的問題中提出的那樣。