在web.config文件中写一个Server.MapPath?

时间:2012-11-19 09:15:52

标签: c# asp.net web-config log4net server.mappath

您好我正在尝试为我的实时网站编写日志,并且我的路径出现问题,我需要使用方法Server.MapPath,但我需要在我的web.config中完成。

我该怎么做?

文件值保存路径,但我需要在其上设置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中,我只是在文件值中调用密钥=

2 个答案:

答案 0 :(得分:1)

将您的路径存储在配置中

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

从您的代码中读取密钥

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

答案 1 :(得分:0)

从配置文件中读取路径时,Log4net不使用Server.Map路径。它不知道它在Web上下文中运行。我想你可以实现自己的Rolling File Appender版本并覆盖从配置中获取路径的函数。但是,我只会使用日志位置的完整路径。通常,您确实希望登录运行应用程序的其他磁盘,以防止耗尽磁盘空间并终止应用程序。