Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Логгирование в БД с помощью log4net


Автор: Kosya4ok 14.11.2008, 17:05
Добрый день!
Вы бы не могли привести пример логгирования в БД используя ADONetAppender(C# + кофиг файл).
Спасибо.

Автор: jonie 16.11.2008, 18:04
вот конфиг (логирование идет в MSSQL CE базу, убедитесь, что необходимые сборки зарегистрированы в GAC)
база должна быть создана (см : INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception])) и должна называться log.sdf
Код

<log4net>
  <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <bufferSize value="100" />
        <connectionType value="System.Data.SqlServerCe.SqlCeConnection, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <connectionString value="data source='log.sdf';"/>
    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
    <parameter>
      <parameterName value="@log_date" />
      <dbType value="DateTime" />
      <layout type="log4net.Layout.RawTimeStampLayout" />
    </parameter>
    <parameter>
      <parameterName value="@thread" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%thread" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@log_level" />
      <dbType value="String" />
      <size value="50" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%level" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@logger" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%logger" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@message" />
      <dbType value="String" />
      <size value="4000" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@exception" />
      <dbType value="String" />
      <size value="2000" />
      <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
  </appender>


   
  <!-- Set root logger level to DEBUG and its only appender to A1 -->
  <root>
    <level value="DEBUG" />
    
    <appender-ref ref="AdoNetAppender" />
  </root>
</log4net>

пусть это лежит в файле "log4net.config"
пишемгде-нибудь код такой:
Код

        private static void InitLog4Net()
        {
            try
            {
                System.IO.FileInfo fi = new System.IO.FileInfo("log4net.config");
                if (!fi.Exists)
                    throw new ArgumentException("Cant load log4net config. Logging will be disabled");
                log4net.Config.XmlConfigurator.Configure(fi);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ERROR");
            }
        }

        static void Main()
        {
            InitLog4Net();
...блаблабла
        }

ну и работаем в обычном режиме:
Код

        private static readonly ILog logger = LogManager.GetLogger(typeof(ClassName));
 ....

Автор: Kosya4ok 17.11.2008, 10:45
Попробывал применить паттерн в log4net:
Код

<parameter>
      <parameterName value="@log_propertyHostname" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821">
        <conversionPattern value="%property{log4net:HostName}" />
      </layout>
    </parameter>

И сразу же перестал писаться лог БД...В чем может быть ошибка?
Блин я просто в шоке!
Кроме как
Код

<commandText value="INSERT INTO Log1 (Date, Message) VALUES (@log_date, @log_message)" />
    <parameter>
      <parameterName value="@log_date" />
      <dbType value="DateTime" />
      <layout type="log4net.Layout.RawTimeStampLayout, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
    </parameter>  
    <parameter>
      <parameterName value="@log_message" />
      <dbType value="String" />
      <size value="4000" />
      <layout type="log4net.Layout.PatternLayout, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821">
        <conversionPattern value="%message" />
      </layout>
    </parameter>

Залоггировать в БД не получается!И еще заметил методом тыка, что если после изменения конфиг файла ты не сделал клин проекта, то будут применены предыдущие настройки!Это бред какой то!

Автор: Kosya4ok 17.11.2008, 15:36
Оказало что надо после каждого изменения конфига клинить порект и заново компилить.
У меня возникло два вопроса:
1) Почему данные логгируются в базу только после того как перестартовываешь студию? А не сперваого запуска?
2) Почему не логгируются нижеследующие поля?
Код

[align=left]<parameter>

<parameterName value="@log_timestamp" />
                <dbType value="Int32" />
                <size value="4" />
                <layout type="log4net.Layout.PatternLayout, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821">
                    <conversionPattern value="%timestamp" />
                </layout>
            </parameter>

    <parameter>
      <parameterName value="@log_identity" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821">
        <conversionPattern value="%identity" />
      </layout>
    </parameter>
    <parameter>
                <parameterName value="@log_file" />
                <dbType value="String" />
                <size value="255" />
                <layout type="log4net.Layout.PatternLayout, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821">
                    <conversionPattern value="%file" />
                </layout>
            </parameter>[/align]

А все остальные логгируются? Глюк log4net'a?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)