registro log4net en ArcMap

Existe todo un mundo de herramientas hechas a medida para varios departamentos gubernamentales y empresas privadas para manejar cosas que ESRI ArcMap nativo no puede hacer.

O incluso cosas personalizadas de ArcGIS Server que necesita crear y mantener.

驴C贸mo registrar f谩cilmente todos esos eventos deseados / no deseados en su aplicaci贸n?

Puede utilizar log4net.

Estos son los pasos:

  1. Cree un archivo de configuraci贸n separado para log4.net;
  2. Cree un m茅todo o clase para cargar el archivo de configuraci贸n cuando se inicie la aplicaci贸n. H谩galo dentro del m茅todo Startup de una IExtension personalizada, por ejemplo;
  3. Cerrar sesi贸n;

Aqu铆 hay una muestra de una extensi贸n de ArcMap Desktop

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"; }
}
}

En este caso, el archivo de configuraci贸n log4.net se encuentra en el mismo directorio que mi ensamblado. Deber谩 implementar el archivo de configuraci贸n en ese mismo directorio cada vez que instale su extensi贸n en la m谩quina de los usuarios.

Ejemplo de configuraci贸n 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="MyNamespace.CwdRollingFileAppender, MyNamespace.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>