Относительные пути к файлу лога в log4net

07.11.2009 10:59 / Артём Волк / 1486 просмотров / ...

Удобная библиотека log4net позволяет направлять сообщения логов в разные хранилища-получатели: в текстовые файлы, в Event Log Windows, в СУБД и т.п.

Один из т.н. Appender'ов (в терминологии log4net) — это текстовый файл с поддержкой ротации по размеру. Однако, для применения в ASP.NET-проектах есть одно неудобство — нужно указывать полный путь к файлу лога.

Чтобы обеспечить поддержку относительных путей можно унаследовать класс RollingFileAppender.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using log4net;
using System.Web.Hosting;

namespace CrispStudio.Logging 
{
    public class AspNetRollingFileAppender : log4net.Appender.RollingFileAppender
    {
        public override string File
        {
            get { return base.File; }
            set { base.File = HostingEnvironment.MapPath(value); }
        }
    }
}

...и использовать класс при конфигурации:

<log4net>
	<appender name="CrispStudioTextLog" type="CrispStudio.Logging.AspNetRollingFileAppender">
		<file value="~\App_Data\WebSite.log"/>
		<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
		<appendToFile value="true"/>
		<maximumFileSize value="10MB"/>
		<maxSizeRollBackups value="10"/>
		<staticLogFileName value="true"/>
		<rollingStyle value="Size"/>
	</appender>
	...
</log4net>