4 votos

Usando log4net en la solución de complemento ArcMap

Me gustaría usar log4net como el registro de marco para mi complemento. Sin embargo, ahora estoy teniendo problemas en habilitar el registro en modo de depuración y en la libertad de esriAddin archivo. Funciona en uno, no los dos al mismo tiempo.

Tengo un dedicado archivo de configuración para log4net (llamado log4net.xml). Cuando la Acción de Compilación del archivo se establece en Content, el registro de obras en el modo de depuración, pero no en la versión del complemento. Cuando la construcción de la Acción es AddinContent, es todo lo contrario.

La razón de esto es que cuando en modo de depuración, la solución utiliza la carpeta bin como el directorio base, pero cuando el complemento es compilado, la carpeta es el "esriaddin de archivo".

Por eso, cuando en modo de depuración y Build Action=Contenido de" la log4net.xml es en C:\Users\%username%\AppData\Local\ESRI\Desktop10.0\AssemblyCache\{9FFCCA4E-6DD6-81B5-17C3-7683C725F70D}. Cuando me cambio de Construir la Acción "Agregar Contenido" (mientras que todavía en el modo de depuración), el log4net.xml no se copian en el directorio!

Mi problema es ¿cómo puedo configurar mi solución para que los log4net archivo de configuración sería en una ubicación estática , independientemente de la Acción de Compilación? Necesito hacer esto porque quiero automatizar el proceso de construcción y cambio de la Acción de generación de forma manual no es una opción.

Lo he comprobado en este hilo, pero su solución es editar el ArcMap.exe.config archivo que no es una opción para mí (muchos usuarios para el complemento, el archivo no puede estar vacío).

Alguna sugerencia?

4voto

Jon Galloway Puntos 28243

kor_,

esto es lo que hice (en ArcMap 9.3.1).

  1. Creó un separado archivo de configuración para log4net;
  2. Cargado que cuando el código de extensión de carga;
  3. Comenzó a registro de distancia.

    clase pública CadastralExtension:IExtension { privado ILog _logger; privado IApplication _application; privado ICadastralApplicationEventListener _cadastralEventListener; privado EditorEventHandler _editorHandler; privado IArcMapContext _context; privado IEditor _editor;

    public void Startup(ref object initializationData)
    {
        ConfigureLogging();
    
        _application = (IApplication)initializationData;
        _logger = LogManager.GetLogger(typeof (CadastralExtension));
    
        _logger.Info("".PadLeft(50, '-'));
        _logger.Info("".PadLeft(50, '-'));
        _logger.Info("".PadLeft(50, '-'));
        _logger.Info("Inicializando extensão cadastral.");
    
        _cadastralEventListener = new CadastralApplicationEventListener(_application);
        _editor = ExtensionFinder.GetEditor();
    }
    
    // this is the importante function
    private void ConfigureLogging()
    {
        var assemblyFile = new FileInfo(Assembly.GetExecutingAssembly().Location);
        var logConfig = new FileInfo(Path.Combine(assemblyFile.DirectoryName, "log4net.config"));
    
        XmlConfigurator.ConfigureAndWatch(new FileInfo(logConfig.FullName));
    }
    
    public void Shutdown()
    {
        _logger.Info("Finalizando a extensão cadastral");
        _logger.Info("".PadLeft(50, '-'));
        _logger.Info("".PadLeft(50, '-'));
        _logger.Info("".PadLeft(50, '-'));
    }
    
    public string Name
    {
        get { return "jakovasaur"; }
    }
    

    }

Esta es una por separado .archivo de configuración, con todas las configuraciones de log4net

<?xml version="1.0" encoding="utf-8" ?> <configuration>   <configSections>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />   </configSections> <log4net>   <appender name="LogFileAppender" type="BrasilPartners.GIS.ArcMapToolbar.Core.Logging.CwdRollingFileAppender, BrasilPartners.GIS.ArcMapToolbar.Core">
    <file value="logs.txt" />
    <appendToFile value="true" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="1MB" />
    <staticLogFileName value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline%exception" />
    </layout>   </appender>   <root>
    <level value="ALL" />
    <appender-ref ref="LogFileAppender" />   </root> </log4net> </configuration>

Cosas importantes

  • Siempre implementar el .archivo de configuración a un lugar conocido. Para hacer que usted puede crear proyectos de instalación, en el que se puede controlar la ubicación de donde se va a ser. Mi archivo de configuración en este ejemplo, se encuentra en el mismo directorio que esta asamblea.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X