Как использовать шаблон даты в верхнем / нижнем колонтитуле?

вот моя конфигурация приложения из моего приложения.конфиг. Это просто распечатывает литеральную строку вместо перевода ее на дату (т. е. буквально печатает "[START: %date{MM/dd/yy HH:mm} ]").

<appender name="RollingLogFileAppender"
          type="log4net.Appender.RollingFileAppender">
  <file value="C:somelog" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <datePattern value="-yyyy-MM-dd'.txt'" />
  <layout type="log4net.Layout.PatternLayout">
    <header value="[START:  %date{MM/dd/yy HH:mm} ]
" />
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" />
    <footer value="[END]

" />
  </layout>
</appender>

Как я могу заставить это напечатать дату/время в заголовке?

4 ответов


простой способ сделать это-подкласс log4net.Layout.PatternLayout и переопределить верхний и Нижний колонтитулы. Затем вы можете добавить в свой заголовок все, что хотите: штамп даты, имя машины, имя пользователя, версию сборки или все, что пожелает ваше сердце:

using System;
using log4net.Layout;

namespace MyAssembly
{
    class MyPatternLayout : PatternLayout
    {
        public override string Header
        {
            get
            {
                var dateString = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                return string.Format("[START:  {0} ]\r\n", dateString);
            }
        }
    }
}

включите этот новый класс в свою сборку и используйте новый тип в своем файле, например:

<layout type="MyAssembly.MyPatternLayout">
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" />
</layout>

Так как вы преодолели верхний и Нижний колонтитулы, вам даже не нужно добавлять его здесь. Заголовок будет добавляться каждый раз, когда ваше приложение начинается, и каждый раз создается новый файл.


ответ здесь.

<header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
<footer value="[END LOGGING AT %date]%newline" type="log4net.Util.PatternString" />

работает для меня как шарм. Не нужно писать код.

также в проектах, которые мы обычно используем:

<header type="log4net.Util.PatternString" value="Our Application Name version %property{Assembly.Version}, .NET version %property{Runtime.Version}, %date ***%newline"/>

посмотри PatternString doc также.

также я заметил, что файл журнала не появится, пока вы не напишете первый оператор журнала.


я столкнулся с этой проблемой, и быстрый обходной путь, который я использовал, - это просто использовать фиксированный верхний и Нижний колонтитулы. Затем сделайте это, как только у вас есть объект ILog:

log.Info(string.Format("[START: {0} ]\r\n", dateString))

Так сразу под заголовком вы получите информацию, которую вы хотите.

Е. Г

===Start===
[START:  2012-02-23 12:12:12 ]

logs...

дом на @Wizou это комментарий. Вижу Класс DynamicPatternLayout документация.

Я фактически использую эту разницу в поведении, чтобы иметь время начала и окончания

одним из важных различий между PatternLayout и DynamicPatternLayout является обработка параметров верхнего и Нижнего колонтитулов в конфигурации. Параметры верхнего и Нижнего колонтитулов для DynamicPatternLayout должны быть синтаксически форма PatternString, но не должна быть помечена как тип log4net.Утиль.PatternString. Это приводит к статическому преобразованию шаблона во время конфигурации и заставляет DynamicPatternLayout выполнять то же самое, что и PatternLayout.

установка типа в заголовке в PatternString, но оставляя нижний колонтитул как динамический

<layout type="log4net.Layout.DynamicPatternLayout"> <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" type="log4net.Util.PatternString" /> <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> </layout>