Где log4net создаст этот файл журнала?
Когда я устанавливаю значение файла logs\log-file.txt
, где именно он будет создавать эту папку? В каталоге /bin
?
Мой web.config выглядит следующим образом:
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="logs\log-file.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
</log4net>
Правильно ли это протокол:
ILog logger = LogManager.GetLogger(typeof(CCController));
logger.Error("Some Page", ex); // where ex is the exception instance
Ответы
Ответ 1
Если вы хотите, чтобы ваш файл журнала находился в указанном месте, которое будет определено во время выполнения, возможно, это выходной каталог вашего проекта, тогда вы можете настроить запись файла .config
таким образом
<file type="log4net.Util.PatternString" value="%property{LogFileName}.txt" />
а затем в коде перед вызовом log4net configure
установите новый путь, как показано ниже
log4net.GlobalContext.Properties["LogFileName"] = @"E:\\file1"; //log file path
log4net.Config.XmlConfigurator.Configure();
Насколько это просто? :)
Ответ 2
он создаст файл в корневом каталоге вашего проекта/решения.
Вы можете указать местоположение по выбору в web.config вашего приложения следующим образом:
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:/ServiceLogs/Olympus.Core.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value=".yyyyMMdd.log" />
<maximumFileSize value="5MB" />
<staticLogFileName value="true" />
<lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock" />
<maxSizeRollBackups value="-1" />
<countDirection value="1" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level [%thread] %logger - %message%newline%exception" />
</layout>
</appender>
тег файла указывает местоположение.
Ответ 3
Значение файла может быть либо абсолютным путем, как "c:\logs\log.txt", либо относительным путем, который, по моему мнению, относится к каталогу bin.
Что касается его реализации, я обычно помещаю следующее в начало любого класса, в который я планирую войти:
private static readonly ILog Log = LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
Наконец, вы можете использовать его так:
Log.Debug("This is a DEBUG level message.");
Ответ 4
Log4net сохраняет в папке проекта. Что-то вроде: \SolutionFolder\ProjectFolder\bin\SolutionConfiguration\logs\log-file.txt
.
Где:
- SolutionFolder - это место, где вы сохраняете свое решение.
- ProjectFolder - это папка, в которой ваш проект живет в решении и
- SolutionConfiguration - это папка, в которой хранятся все двоичные файлы вашего проекта (по умолчанию используется Debug или Release).
Надеюсь, это поможет!
Ответ 5
FileAppender appender = repository.GetAppenders().OfType<FileAppender>().FirstOrDefault();
if (appender != null)
logger.DebugFormat("log file located at : {0}", appender.File);
else
logger.Error("Could not locate fileAppender");
Ответ 6
Для папки журнала и файлов используйте @Bens answer.
Я прокомментирую создание части журнала. Имо нет правильного пути. Когда я записываю журналы вручную, я делаю это так, как вы это делаете:
ILog logger = LogManager.GetLogger(typeof(CCController));
потому что он короткий и краткий.
Тем не менее, я не создаю экземпляры журнала в классах в эти дни, Я позволил контейнеру IoC ввести его мне.
Ответ 7
Я думаю, что ваш образец сохраняется в папках проекта, и если пользователь по умолчанию iis или .NET не имеет права на создание, он не сможет создать папку журналов.
Сначала я создал папку журналов и разрешил бы пользователю iis полное разрешение и посмотрел, будет ли создан файл журнала.
Ответ 8
если вы хотите динамически выбирать путь к файлу журнала, используйте метод, описанный в этой ссылке: метод для динамического выбора пути к файлу журнала.
если вы хотите, вы можете указать путь к файлу EXE вашего приложения следующим образом:
var logFileLocation = System.IO.Path.GetDirectoryName
(System.Reflection.Assembly.GetEntryAssembly().Location);
и затем отправьте этот 'logFileLocation' методу, описанному в ссылке выше, например:
Initialize(logFileLocation);
и ты готов к работе! :)