2013-04-23 3 views
1

Я разрабатываю плагин AutoCAD 2012 с использованием API-интерфейса API .net. Плагин Autocad - это dll, которые загружаются во время выполнения Autocad при запуске Autocad. успешно log lognet с использованием среды разработки Visual Studio.Однако, когда я запускаю плагин вне Visual Studio, то есть при развертывании моего плагина, log4net не регистрирует никаких сообщений или даже не создает файл журнала. и файл конфигурации.log4net не регистрируется из плагина Autocad при развертывании

log4net_autocad.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/> 
    </configSections> 

    <log4net> 
    <appender name="AutocadRollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <param name="File" value="${NIRVANA_SOFTWARE_INSTALL_PATH}Relay_Manager_Autocad.log"/> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="0" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p [%C.%M] %m%n"/> 
     </layout> 
    </appender> 
    <logger name="AutocadFile"> 
     <level value="All"/> 
     <appender-ref ref="AutocadRollingFileAppender"/> 
    </logger> 
    </log4net> 
</configuration> 

myPlugin.cs: Код для congifure регистрации

public class MyPlugin : IExtensionApplication { 

    private static log4net.ILog log; 

    void IExtensionApplication.Initialize() { 
     ... 
     log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net_autocad.config")); 
     log = log4net.LogManager.GetLogger("AutocadFile"); 
    } 

недействительным IExtensionApplication.Initialize() будет выполняться при запуске Autocad. Пара вещей, которые я проверил:

  • Проверено, что Autocad плагин правильно загружена в Autocad, который означает, что код инициализации log4net побежал.
  • Проверено, что log4net конфигурационный файл (log4net_autocad.config) копируется в каталоге бен развернутого приложения

Самое странное, что когда я загрузить плагин в Developement среде (VS 2010), плагин правильно регистрируется. Итак, почему log4net не регистрирует (или даже создает файл журнала) при развертывании.

EDIT: Я проверил некоторые дополнительные вещи

В плагин, прежде чем я войти, я проверил следующие через диалоговые окна оповещения.

  • log.Logger.Name правильно возвращает имя регистратора, который я использую.
  • log.Logger.IsEnabledFor (log4net.Core.Level.All) возвращает false, хотя я сконфигурировал Level Value = All в файле конфигурации.



EDIT-2 Я попытался определить конфигурационный файл, как описано в ссылающейся URL ответа. Я цитирую подход, описанный в документе.

2.] Настройка приложения файла: [AppName] .exe.config, [AppName] .dll.config Конфигурация на уровне приложений, [AppName] .exe.config или [AppName] .dll.config , где большая часть этого документа будет тратить свое время. Этот файл конфигурации будет содержать все параметры уровня приложения и даже может использоваться для определения использования и значений по умолчанию для параметров , связанных с файлами конфигурации Roaming-User и Local-User. Эти файлы обычно хранятся в том же каталоге, что и исполняемый файл приложения, но могут быть размещены в другом месте, если это необходимо. Там будет гораздо больше дискуссий.

Изложенный подход устраивает мое заявление, но я до сих пор не могу получить регистратор что-либо войти в all.I определил log4net конфигурационный файл с именем RelayAnalysis_Autocad.dll.config и снабдив его к log4net для конфигурации. Я думаю, что есть что-то еще, что я не могу понять. Я начал сомневаться, можем ли мы с помощью log4net подключиться к плагину autocad? Я также удалил путь среды и закодировал его так, чтобы устранить любые проблемы, связанные с чтением переменной окружения. Еще не повезло.

+0

пытаются поставить log4net_autocad.config содержимое app.config Автохама? то есть файл autocadXXX.exe.config –

+0

Ввод его в программные файлы версии acad.exe.config выдает пакет ошибок, и autocad даже не запускается. Ввод его в пользовательскую версию acad.exe.config не вызывает ошибок, но не регистрировался. Обратите внимание, что в обоих случаях я указал конфигуратор log4net на правильный файл. Я также попробовал еще несколько вещей, упомянутых в Edit-2 моего вопроса. – Jatin

+0

Вы проверяли разрешения файлов в папке назначения? Кроме того, я должен попытаться создать пустой файл журнала перед запуском autocad. Наконец: пожалуйста, сохраните в pastebin ошибку, которую вы получите в acad.exe.config. Кроме того, см. Мое редактирование ниже. –

ответ

0

На развертывании, вы должны сохранить конфигурацию плагина в одном из default config files:

  • User.config
  • acad.exe.config
  • machine.config

Возможно, User.config лучший файл тщательно изменение во время настройки. Кроме того, вы должны проектировать и кодировать изменения, чтобы их можно было удалить при удалении.

Doublecheck, что вы правильно заменили ${NIRVANA_SOFTWARE_INSTALL_PATH} во время настройки и что папка имеет соответствующие разрешения.

Кроме того, я хотел бы попробовать либо добавить к AssemblyInfo.cs следующую строку

[assembly: log4net.Config.XmlConfigurator(ConfigFile="AbsolutePathToTheConfig")] 

(в этом случае вы не должны вызывать XmlConfigurator.Configure) или использовать абсолютный путь в вызове

log4net.Config.XmlConfigurator.Configure(new FileInfo("AbsolutePathToTheConfig")); 

Наконец, обратите внимание, что документация log4net о XmlConfigurator.Configure говорится, что файл конфигурации используется, может быть XML, не соответствующие правилам .NET конфигурации.

Файл конфигурации должен быть действительным XML. Он должен содержать хотя бы один элемент, называемый log4net, который содержит данные конфигурации log4net.

Таким образом, в файле log4net_autocad.config вы можете пропустить <configuration> элемент:

<log4net> 
    <appender name="AutocadRollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <param name="File" value="Absolute\Path\To\Relay_Manager_Autocad.log"/> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="0" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p [%C.%M] %m%n"/> 
     </layout> 
    </appender> 
    <logger name="AutocadFile"> 
     <level value="All"/> 
     <appender-ref ref="AutocadRollingFileAppender"/> 
    </logger> 
</log4net> 
+0

Спасибо за информативную ссылку. Я старался следовать по пути, определенному там, но до сих пор не повезло.Дополнительную информацию см. В разделе «Редактирование-2» моего вопроса. – Jatin

+0

Эй, Джакомо, ты прав. Абсолютный путь к конфигурационному файлу log4net требуется в конфигураторе. Проблема решена, и щедрость ваша! Благодарю. – Jatin

Смежные вопросы