Добро пожаловать Гость, вы находитесь: Вход

Изображение Flexberry Wiki



  • Программная библиотека: LogService.dll, log4net.dll
  • Предназначение: Компонент осуществляет запись событий работы программного продукта.






Flexberry LogService

Flexberry LogService является продуктом платформы Flexberry и предназначен для осуществления записи событий работы программного продукта.
Flexberry LogService базируется на log4net.

Information
Flexberry LogService доступно для установки в проект через NuGet package.

Пример использования LogService

try
{
  int i = (int)val;
}
catch (Exception ex)
{
   LogService.LogError("Произошло нечто ужасное", ex);
}

Конфигурирование

Пример конфигурации (дополнительные аппендеры можно найти по ссылке: config-examples):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!-- регистрируем специальную секцию -->
  <configSections>
    <!--  <section name="log4net" type="System.Configuration.IgnoreSectionHandler" />  -->
	<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <!-- описание того как же мы будем логи писать. Примеры других аппендеров: http://logging.apache.org/log4net/release/config-examples.html -->
  <log4net>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="log/trace.log"/>
      <param name="AppendToFile" value="true"/>
      <param name="RollingStyle" value="Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%-5p %d{yyyy-MM-dd hh:mm:ss} [%t] %m%n" />
      </layout>
    </appender>
	
	<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
	</appender>

    <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    <to value="to@flexberry.ru" />
    <from value="error@flexberry.ru" />
    <subject value="test logging message" />
    <smtpHost value="smtpHost" />
    <bufferSize value="512" />
    <lossy value="true" />
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
    </evaluator>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
    </layout>
</appender>
	
	<root>
      <level value="DEBUG"/>
      <appender-ref ref="LogFileAppender"/>
      <appender-ref ref="SmtpAppender"/>
      <appender-ref ref="EventLogAppender"/>
    </root>
  </log4net>
</configuration>

Написание своего аппендера

Часто существующих решений недостаточно, для этого, есть возможность написать свой аппендер. Тут есть всего 2 важных момента:
  1. Нужно унаследоваться от log4net.Appender.AppenderSkeleton и переопределить метод protected override void Append(log4net.Core.LoggingEvent loggingEvent)
  2. Все публичные свойства могут быть означены через конфигурацию этого конкретного аппендера

Пример кода аппендера:

using System;
using System.Collections;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using ICSSoft.STORMNET;
using RemoteLogger;

namespace Logging
{
    public class RemoteLoggerAppender:log4net.Appender.AppenderSkeleton
    {
        private string _srvUrl;

        /// <summary>
        /// Адрес сервиса
        /// </summary>
        public string SrvUrl
        {
            get { return _srvUrl; }
            set { _srvUrl = value; }
        }

        protected override void Append(log4net.Core.LoggingEvent loggingEvent)
        {
            IDictionary props = new Hashtable();
            props["name"] = Guid.NewGuid().ToString();

            HttpClientChannel chan = new HttpClientChannel(props, new BinaryClientFormatterSinkProvider());

            try
            {
                ChannelServices.RegisterChannel(chan, false);

                Logger logger = (Logger)Activator.GetObject(typeof(Logger), SrvUrl);
                if (loggingEvent.ExceptionObject == null)
                {
                    logger.Info(loggingEvent.MessageObject.ToString());
                }
                else
                {
                    logger.Info(loggingEvent.MessageObject.ToString(), loggingEvent.ExceptionObject);
                }
                
            }
            catch (Exception ex)
            {
                LogService.Log.Error("RemoteLoggerAppender", ex);
            }
            finally
            {
                ChannelServices.UnregisterChannel(chan);
            }
        }
    }
}

В конфиге подключается этот аппендер таким образом:


    <appender name="remoteLoggerAppender" type="Logging.RemoteLoggerAppender, RemoteLoggerAppender">
      <SrvUrl value="tcp://localhost:2121/RemoteLogSrv"/>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="remoteLoggerAppender"/>
    </root>

Как видно, SrvUrl передаётся как параметр в конфиге и может применяться при выводе сообщений в коде аппендера. Атрибут type задаёт полный тип аппендера с неймспейсом и указанием имени сборки. Разумеется сборка с аппендером должна находиться рядом со сборкой log4net.

Откуда ссылаются на эту страницу


Куда ссылается эта страница



На этой странице ещё нет сообщений. Ваше будет первым!

ScrewTurn Wiki version 3.0.5.600. Some of the icons created by FamFamFam.