В системе ELMA предусмотрена возможность логирования сообщений с помощью логгера log4net. Это может оказаться полезным в случае, когда требуется детальная отладка скриптов, например просмотр того, как изменялась конкретная переменная в ходе выполнения кода и таким образом лучше понимать что приводит к возникновению ошибки или неправильной работы системы. Конфигурационный файл логгера находится по пути: {elma_directory}\Web\Config\log4net.config В конфигурационном файле описываются две сущности: appender и logger, а также их взаимосвязи. Appender главным образом описывает куда будут записываться лог-файлы и их формат. Logger определяет уровень логирования (например Debug, Error, Info) и appenderы, к которым он будет обращаться. По умолчанию Elma уже содержит в себе настроенный конфигурационный файл, поэтому нам необходимо просто знать куда по умолчанию он будет записывать информацию и как им пользоваться. Допустим у нас есть следующий код: public virtual void VnesenieDannyhVTablicuVsehNesootvetstviy (Context context) { var parentInstance = context.WorkflowInstance.ParentInstance; if (parentInstance != null) { dynamic parentContext = parentInstance.Context; context.DoneFlag = "Ok"; var i = 0; foreach (var element in context.Nesootvetstviya) { var item = CreateParentItem (parentContext.TablicaVsehNesootvetstviy); item.NomerNesootvetstviya = ++i; item._1ProveryaemoePodrazdelenie = element._1ProveryaemoePodrazdelenie; item.DataNesootvetstviya = element.DataNesootvetstviya; item.StandartNDSUkazaniemPunkta = element.StandartNDSUkazaniemPunkta; item.OpisanieNesootvetstviya = element.OpisanieNesootvetstviya; item.Nomer = i; } } } И допустим на каком-то из элементов из context.Nesootvetstviya процесс падает, но мы не знаем точно на каком и почему. В этом случае мы можем использовать логер. Для этого нужно: Добавить сборку log4net из сборок elma. Добавить пространство имён using log4net; в начале кода. (как вариант) Получить экземпляр логера по имени var logger = log4net.LogManager.GetLogger("Scripts"); , где Scripts - это имя логера. Например: public virtual void VnesenieDannyhVTablicuVsehNesootvetstviy (Context context) { var logger = log4net.LogManager.GetLogger("Scripts"); logger.Debug("Enter VnesenieDannyhVTablicuVsehNesootvetstviy"); var parentInstance = context.WorkflowInstance.ParentInstance; if (parentInstance != null) { dynamic parentContext = parentInstance.Context; context.DoneFlag = "Ok"; var i = 0; foreach (var element in context.Nesootvetstviya) { var item = CreateParentItem (parentContext.TablicaVsehNesootvetstviy); item.NomerNesootvetstviya = ++i; logger.Debug(String.Format("i = ", i)); item._1ProveryaemoePodrazdelenie = element._1ProveryaemoePodrazdelenie; logger.Debug(String.Format("_1ProveryaemoePodrazdelenie = ", element._1ProveryaemoePodrazdelenie.ToString())); item.DataNesootvetstviya = element.DataNesootvetstviya; logger.Debug(String.Format("DataNesootvetstviya = ", element.DataNesootvetstviya.ToString())); item.StandartNDSUkazaniemPunkta = element.StandartNDSUkazaniemPunkta; logger.Debug(String.Format("StandartNDSUkazaniemPunkta = ", element.StandartNDSUkazaniemPunkta.ToString())); item.Nomer = i; } } } С этим кодом записи сделанные методом logger.Debug будут записаны в файл, который указан в appender у логгера Scripts. Если используется конфигурационный файл по умолчанию, то это будет файл по пути {elma_directory}\Web\Logs\scripts Также нужно обратить внимание, чтобы уровень логирования у логера (level value) включал в себя уровень логирования, используемый в коде. В случае с примерами, мы использовали логирование уровня Debug, а в логгере конфигурационного файла указано: <logger name="Scripts" additivity="false"> <level value="All"/> <appender-ref ref="Scripts" /> </logger> Уровень логирования All подразумевает, что любой уровень логирования будет принят appenderом Scripts.