2012-11-19 21 views
0

嗨,我想寫日誌我的生活網站和我的路徑有問題,我需要使用方法Server.MapPath,但我需要它在我的web.config中完成。在web.config文件中寫一個Server.MapPath?

我該怎麼辦呢?

文件值包含路徑,但我需要在其上設置一個Server.MapPath。

<log4net> 

<add key="LogFilePath1" value="../Logs/CurrentLog" id="FP1"/> 
<add key="LogFilePath2" value="../Logs/CurrentLog.txt" id="FP2" /> 

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="../Logs/CurrentLog"/> 
    <appendToFile value="true"/> 

    <rollingStyle value="Size"/> 
    <maxSizeRollBackups value="10"/> 
    <maximumFileSize value="10000"/> 
    <staticLogFileName value="true"/> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <acceptOnMatch value="true"/> 
    <levelMin value="INFO"/> 
    <levelMax value="FATAL"/> 
    </filter> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%-5level %date [%thread] %-22.22c{1} - %m%n"/> 
    </layout> 
</appender> 

<appender name="LogFileAppender" type="log4net.Appender.FileAppender"> 
    <file value="../Logs/Log.txt"/> 
    <appendToFile value="true"/> 
    <layout type="log4net.Layout.PatternLayout"> 
    <header value="**"/> 
    <footer value="**"/> 
    <conversionPattern value="%newline%date [%thread] %-5level %logger - %message%newline" /> 
    </layout> 
</appender> 

<root> 
    <level value="DEBUG"/> 
    <appender-ref ref="LogFileAppender"/> 
    <appender-ref ref="ConsoleAppender"/> 
    <appender-ref ref="RollingFileAppender"/> 
</root> 

<logger name="ConsoleApp.LoggingExample"> 
    <level value="ERROR"/> 
    <appender-ref ref="EventLogAppender"/> 
</logger> 

記錄器代碼的C#:

public class Logger 
    { 
     protected static readonly ILog logger = LogManager.GetLogger(typeof(Logger)); 



     public void logError(string message, Exception ex) 
     { 
      HttpContext.Current.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["LogFilePath1"])); 
      HttpContext.Current.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["LogFilePath2"])); 
      log4net.Config.XmlConfigurator.Configure(); 
      logger.Error(message + ex); 
     } 


     public void logInfo(string message) 
     { 
      HttpContext.Current.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["LogFilePath1"])); 
      HttpContext.Current.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["LogFilePath2"])); 
      log4net.Config.XmlConfigurator.Configure(); 
      logger.Info(message); 
     } 

    } 

我加入了C#代碼的使用Server.Mappath鑰匙,我只是掙扎調用thhe文件值的鍵=

+0

我不認爲你可以在'web.config'中使用'Server.MapPath',因爲它的'xml'文件! –

回答

1

將您的路徑存儲在配置中作爲

<add key="LogFilePath1" value="~/Logs/CurrentLog" id="FP1"/> 

從你的代碼讀取讀取從配置文件的路徑當鑰匙

string path = GetPath("LogFilePath1"); 
string fullPath = System.Web.HttpContext.Server.MapPath(path); 
+0

謝謝我只是提出了我做類似的代碼,那麼我可以如何設置文件值= LogFilePath1? – Pomster

+0

對不起,我不熟悉log4net。你不能在配置文件中使用Server.MapPath – codingbiz

+0

是的,我已經把它切換到了C#代碼中的Server.MapPath,但是現在我有與正確的地址,我需要移動此地址的值<文件值=「../日誌/當前日誌」/>我如何使值=關鍵LogFilePath1? – Pomster

0

的log4net不使用Server.Map路徑。它不知道它在web上下文中運行。我想你可以實現自己的Rolling File Appender版本,並覆蓋從配置獲取路徑的函數。但是,我只是使用完整的路徑到日誌位置。通常情況下,您確實需要登錄運行應用程序的其他磁盤,以防止磁盤空間用盡並終止您的應用程序。