registro log4net no ArcMap

Existe um mundo inteiro de ferramentas feitas sob medida para vários departamentos governamentais e empresas privadas para lidar com coisas que o ESRI ArcMap não pode fazer.

Ou até mesmo coisas personalizadas do ArcGIS Server que você precisa criar e manter.

Como registrar facilmente todos os eventos desejados / indesejados em seu aplicativo?

Você pode usar o log4net.

Aqui estão as etapas:

  1. Crie um arquivo de configuração separado para log4.net;
  2. Crie um método ou classe para carregar o arquivo de configuração quando o aplicativo é inicializado. Faça isso dentro do método Startup de um IExtension personalizado, por exemplo;
  3. Faça login;

Aqui está um exemplo para uma extensão 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"; }
}
}

Neste caso, o arquivo de configuração log4.net está localizado no mesmo diretório que meu assembly. Você precisará implantar o arquivo de configuração nesse mesmo diretório sempre que instalar sua extensão na máquina do usuário.

Configuração log4net de amostra:

<?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>