Sunteți pe pagina 1din 39

Pgina1

Traduccinmanual

Montenegro,MarceloFabian
Febrero de 2011

http://www.creativecommons.org.ar/licencias
Pgina2

Contenido
Traduccinmanual _________________________________________________________ 1
Montenegro,MarceloFabian_________________________________________________ 1
http://www.creativecommons.org.ar/licenciasContenido__________________________ 1
Contenido_________________________________________________________________ 2
1. DESARROLLO___________________________________________________________ 4
2. CONTROLDECAMBIOS___________________________________________________ 4
1.1 Instalacin___________________________________________________________ 5
1.2 EjemplodeUso_______________________________________________________ 5
1.3 Desde.NET __________________________________________________________ 7
1.4 DesdeDelphi_________________________________________________________ 7
1.5 Archivodeconfiguracin _______________________________________________ 9
1.5.1 Ubicacindelosarchivos _____________________________________________ 9
1.5.2 Formatodelarchivodeconfiguracin___________________________________ 9
1.5.3 Elementosdelaconfiguracin_________________________________________ 9
1.5.4 Targets___________________________________________________________ 10
1.5.5 Reglas ___________________________________________________________ 10
1.5.6 Layoutsylayoutsrenderers __________________________________________ 11
1.5.7 Inclusindearchivosexternos ________________________________________ 11
1.5.8 Reconfiguracinautomtica__________________________________________ 12
1.5.9 Solucionarproblemasenellogging____________________________________ 12
1.5.10 Procesamientoasincrnicoywrappers _________________________________ 13
1.5.11 Defaultwrappers___________________________________________________ 13
1.5.12 Defaulttargetparameters ___________________________________________ 14
3. APIdeconfiguracin.___________________________________________________ 14
4. Unarchivodelogdiario_________________________________________________ 23
5. Logasincrnico________________________________________________________ 24
6. Logseparadoporcomas(CSV)____________________________________________ 24
7. Logbasadoeneltamaodelarchivo ______________________________________ 25
8. Basadoenlafecha_____________________________________________________ 25
9. FormControl __________________________________________________________ 26
10. LogReciverService____________________________________________________ 26
11. Mail_______________________________________________________________ 27
12. Memory____________________________________________________________ 28
13. MessageBox ________________________________________________________ 28
14. MethodCall _________________________________________________________ 29
15. MSMQ_____________________________________________________________ 30
16. Network____________________________________________________________ 31
17. Null _______________________________________________________________ 31
18. OutputDebugString___________________________________________________ 32
19. OutputDebugString___________________________________________________ 32
20. RichTextBox_________________________________________________________ 33
21. Trace ______________________________________________________________ 34
22. WebService _________________________________________________________ 35
23. Layouts ____________________________________________________________ 36
23.1 CsvLayout __________________________________________________________ 36
23.2 LayoutWithHeaderAndFooter __________________________________________ 37
23.3 Layoutrenderers_____________________________________________________ 37
24 Filtros______________________________________________________________ 39
24.1 WHEN _____________________________________________________________ 39
Pgina3


Pgina4

1. DESARROLLO
ElobjetivodeestedocumentoeselespecificarlautilizacindelcomponentenLog(OpenSource)para
podergenerarmensajesparadiagnsticodesdecualquierlenguaje.NET(comoC#VisualBasic.NET)o
quetrabajeconcomponentesCOM(comoDelphiyVisualBasic);coninformacintalcomo:
Fecha/Hora,severidaddelmensaje,hilosutilizados,procesosyvariablesdeentorno.Conunformatode
salidaestipuladomedianteunarchivodeconfiguracincuyodestinopuedeserunarchivoounatabla
enunabasededatos.
Losdistintosdestinospuedenser:

Archivo.Enunoovarios,conunformatodenombreconfigurable.
EventLog(serviciodeeventosdeWindows).Puedeserlocaloremoto.
Basededatos.Cualquieradelasbasesdedatossoportadaspor.NET
Red.UtilizandolosprotocolosTCP,UDP,SOAP,MSMQ
Consola.Pudiendocolocarcoloralosmensajes
Email.
ASP.NETtrace.

Para poder utilizar el componente previamente hay que descargar e instalar el mismo
desde la pgina oficial http://nlog-project.org. Este documento est basado en la
versin de Febrero de 2011


2. CONTROLDECAMBIOS

Autor Fecha Versin Observaciones
Marcelo
Montenegro
28/02/2011 1.0 Formatodedocumento.
Marcelo
Montenegro
30/03/2011 1.1 Traduccin
Marcelo
Montenegro
30/03/2011 1.2 Formatodedocumento.





Pgina5

1.1 Instalacin
Sebajalaltimaversindelcomponente,desdelapginahttp://nlogproject.orgyseinstala.Esto
registrarelarchivonLog.dllparalosdistintosframeworksde.NET
ParautilizarlaDLLdesdeDelphi,sedebergenerarelcorrespondientearchivoTLB(TypeLibrary),
utilizandoelsiguientecomando:

RegAsmNLog.dll/tlb:NLog.tlb

ElejecutableRegAsm.exepuedellegaraestarendistintosdirectoriosdeWindows,loidealsera
utilizarlaltimaversindisponible.Porejemplo,podraencontrarseaqu:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exeen
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe

Conlocual,paraesteejemplo;elcomandoseejecutaradelasiguientemanera.

C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsmNLog.dll/tlb:NLog.tlb

Conelarchivo.TLBgenerado,seprocederaregistrarloenelIDEdeDelphi.Paraello,debern
exportarselasclasesdentrodeunarchivofuente.PAS.Estosehacedelasiguientemanera:

tlibimpP+Hr+Hs+RHa+CdNLog.tlb

Conesto,aparecerunnuevoarchivoeneldirectorio:NLog_TLB.
Laregistracinsehacedesdeelmen:Components>Installcomponentsyenelcuadrodedilogoque
aparece,seelijeeltabsheetIntonewpackagequedandodelasiguientemanera:

TantoenUnitfilenamecomoenPackagefilenamesedeberespecificarelarchivoconsupath
absoluto.
1.2 EjemplodeUso
InicieunnuevoproyectoenVisualStudio,agregueunareferenciaalarchivoNLog.dll
yalarchivodeconfiguracin.Estosdospasossepuedenrealizarjuntosydemanera
sencilla.Parahacerlo,pulseelbotnderechosobreelproyectoyagregueunnuevo
elementodesdelaplantillaNLogcomosemuestraaqu.


Pgina6


Estoagregarlareferenciaala.DLLcorrectasegnelFrameworkconelqueustedesttrabajandoy
crearunarchivodeconfiguracinvaco.Paratrabajar,NLogrequierequeelarchivodeconfiguracin
seacopiadoaldirectoriodelaaplicacin.Parahaceresto,desdeelExploradordeSolucionesdeVisual
Studio,elijaelarchivoNLog.configyenlapropiedadCopiareneldirectorioderesultados,cmbiela
porCopiarsiempre


Pgina7

1.3 Desde.NET
AhoracoloqueunbotnenelformularioyeneleventoOnClickdelbotnseescribelosiguiente:

varlog=LogManager.GetCurrentClassLogger();
log.Debug(".NET>MensajeDebug");
log.Trace(".NET>MensajeTrace");
log.Info(".NET>MensajeInfo");
log.Warn(".NET>MensajeWarning");
log.Error(".NET>MensajeError");
log.Fatal(".NET>MensajeErrorfatal(excepcin)");
MessageBox.Show("Listo");

ModificarelarchivoXMLelcualquedardelasiguientemanera:

<?xmlversion="1.0"encoding="utf8"?>
<nlogxmlns="http://www.nlogproject.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">

<targetsasync="true">

<targetname="ArchivoDebug"xsi:type="File"
layout="${date}${logger}|${machinename}|${windowsidentity}:
${message}|${stacktrace}"
fileName="${basedir}/Logs/${date:format=yyyy/MM/dd}/ArchivoDebug.txt"
keepFileOpen="false"
encoding="iso88592"/>

<targetname="ArchivoTrace"xsi:type="File"
layout="${date}${logger}:${callsite}:${message}"
fileName="${basedir}/Logs/${date:format=yyyy/MM/dd}/ArchivoTrace.txt"
keepFileOpen="false"
encoding="iso88592"/>
<targetname="ArchivoFatal"xsi:type="File"
layout="${date}${logger}:${callsite}:${message}"
fileName="${basedir}/Logs/${date:format=yyyy/MM/dd}/ArchivoFatal.txt"
keepFileOpen="false"
encoding="iso88592"/>
</targets>
<rules>
<loggername="*"minlevel="Debug"maxlevel="Debug"writeTo="ArchivoDebug"/>
<loggername="*"minlevel="Trace"maxlevel="Trace"writeTo="ArchivoTrace"/>
<loggername="*"minlevel="Fatal"maxlevel="Fatal"writeTo="ArchivoFatal"/>
</rules>
</nlog>

Guardarelproyectoyejecutarlo.Pulsarelbotn.Alterminarsehabrngeneradoenelmismo
directoriodelejecutablelosdistintosdirectoriossegnlaestructuraqueseconfigurenelXML(en
esteejemploseraundirectorioparaelao,dentroundirectorioparaelmes,dentrodeesteun
directorioparaelda,yalltodoslosarchivosdelog).

1.4 DesdeDelphi
EnunproyectonuevosecolocadelapaletaServersunTComLogManageryselecambiael
nombrealogmanager,unTComLogger;cambindoseelnombrealogyunbotnenelformulario
encuyoeventoOnClickseescribelosiguiente:

with l ogmanager do

Pgina8

begin
I nt er nal LogToConsol e : = f al se;
I nt er nal LogLevel : = ' I nf o' ;
LoadConf i gFr omFi l e( Ext r act Fi l ePat h( Appl i cat i on. ExeName) +
' NLog. conf i g' ) ;
end;
with l og do
begin
Logger Name : = ' Test Logger ' ;
Tr ace( ' Del phi - > Mensaj e Tr ace' ) ;
Debug( ' Del phi - > Mensaj e Debug' ) ;
I nf o( ' Del phi - > Mensaj e I nf o' ) ;
War n( ' Del phi - > Mensaj e War ni ng' ) ;
Er r or ( ' Del phi - > Mensaj e Er r or ' ) ;
Fat al ( ' Del phi - > Mensaj e Er r or f at al ( excepci n) ' ) ;
end;
MessageDl g( ' Li st o' , mt I nf or mat i on, [ mbOK] , 0) ;


Segrabaelproyectoenelmismodirectorioquelasolucin.NETanterior,seejecutaysepulsael
botnqueapareceenpantalla.

Pgina9

1.5 Archivodeconfiguracin
1.5.1 Ubicacindelosarchivos
NLogintentaconfigurarseautomticamentealinicio,buscandolosarchivosdeconfiguracinen
lugaresestndar.

Elordenyloslugaresdondeinicialmentesebuscar,sonlossiguientes:

Archivoestndardeconfiguracin(usualmente,NombreEjecutable.config)
Eneldirectoriodondeestcorriendolaaplicacin,elarchivoNombreEjecutable.exe.nlog)
Eneldirectoriodondeestcorriendolaaplicacin,elarchivoNLog.config

EncasoquelaaplicacinseaASP.NET,sebuscaren:
Archivoestndardeconfiguracin(web.config)
Archivoweb.nlog,enelmismodirectoriodondeseencuentreweb.config
Eneldirectoriodondeestcorriendolaaplicacin,elarchivoNLog.config

1.5.2 Formatodelarchivodeconfiguracin
NLogsoportadosformatosdeconfiguracin

1. Dentro de los archivos estndar de configuracin (NombreEjecutable.exe.config o


web.config)
2. EnunarchivoXMLaparte.

Paralaprimeravariante,enlaseccinestndarconfigSections,quedandoas:

<configuration>
<configSections>
<sectionname="nlog"type="NLog.Config.ConfigSectionHandler,NLog"/>
</configSections>
<nlog>
......
</nlog>
</configuration>

EsteformatoesXMLpuro,teniendocomoelementoraza<nlog>
Elusodelespaciodenombres(namespace)esopcional,peroestilhacerreferenciaalesquemaya
quehabilitaIntellisenseenVisualStudio

<nlogxmlns="http://www.nlogproject.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
</nlog>

TengaencuentaqueenelarchivoNLognosecontrolarminsculas/maysculascuandonoseest
utilizandoelesquema.Ysisersensibleaminsculas/maysculascuandosehacereferenciaal.
Intellisensesolotrabajaconconfiguracionescasesensitive.

1.5.3 Elementosdelaconfiguracin
Sepodrnutilizarlossiguienteselementoscomohijosde<nlog/>.Losprimerosdoselementosdela
lista,sonrequeridosydebenestarobligatoriamenteentodoslosarchivosdeconfiguracindeNLog

Pgina10

<targets/>Defineadondeserenviadoellogysuestructura
<rules/>Definelasreglasquetendrellogging
<include/>includesexternalconfigurationfile
<variable/>setsthevalueofaconfigurationvariable

1.5.4 Targets
Cadadestinodeunlogserdefinidoporlaseccin<targets/>.Hay2atributosrequeridospara
cadadestino:

NameElnombredeldestino
Type El tipo de destino que recibir el log (un archivo, una tabla, un email). En caso de
utilizarsenamespaces,esteatributoserllamadoxsi:type.

Ademas,cadatargettieneparmetrosadicionalesquesevernmasadelante.
Porejemplo,eltargetfiletieneunatributofileNamequeindicaelarchivodesalida.
Aquunejemploquemuestraelusodelaseccin<targets/>dondesemuestraqueesposible
definirmasdeundestinodistinto.

<targets>
<targetname="f1"xsi:type="File"fileName="archivo1.txt"/>
<targetname="f2"xsi:type="File"fileName="archivo2.txt"/>
<targetname="n1"xsi:type="Network"address="tcp://localhost:4001"/>
<targetname="ds"xsi:type="OutputDebugString"/>
</targets>

1.5.5 Reglas
Lasreglassondefinidasenlaseccin<rules/>.Esunasimpletabladeruteo,dondesedefinenuna
listadetargetsdedestino.Lasreglassonprocesadascomenzandodesdelaprimerareglaenla
lista.Cuandounareglaconcuerda,losmensajesdelogssonredirigidosatodoslostargetsdeesa
regla,Silareglaesmarcadacomoltima,lasreglasquelesiguennosernprocesadas.

Cadaentradaenlatabladeruteo,esunelementoqueaceptalossiguientesatributos.

name source/loggername(mayincludewildcardcharacters*)
minlevel Mnimoniveldelog
maxlevel Mximoniveldelog
level Simpleniveldelog
levels Nivelesseparadosporcomaaprocesarporstaregla
writeTo targetsseparadosporcoma
final Marcaestareglacomoltima

Ejemplosdereglas:
1. Todos los mensajes provenientes de la clase Class1 en el namespace Name.Space cuyo
nivelseaDebugsuperiorsernescritoseneltargetf1
<loggername="Name.Space.Class1"minlevel="Debug"writeTo="f1"/>

2. Todos los mensajes provenientes de la clase Class1 en el namespace Name.Space cuyo


nivelseaDebugErrorosuperiorsernescritoseneltargetf1
<loggername="Name.Space.Class1"minlevel="Debug,Error"writeTo="f1"/>

3. Todos los mensajes provenientes de cualquier clase en el namespace Name.Space sern


escritoseneltargetf3yf4segnelnivelquetengan

Pgina11

<loggername="Name.Space.*"writeTo="f3,f4"/>

4. TodoslosmensajesprovenientesdecualquierclaseenelnamespaceName.Spacecuyo
nivelesteentreDebugyError(estoseraDebug,Info,Warn,Error)seranrechazadosyno
sevolvernaprocesaresosmensajes(propiedadfinal=true)

<loggername="Name.Space.*"minlevel="Debug"maxlevel="Error"final="true"
/>

1.5.6 Layoutsylayoutsrenderers
UnaopcinmuytildeNLogeslacapacidaddeutilizardiseosenenenvodeinformacin.Un
diseosimpletieneunformatodetagsdelimitadospor${y}.EstostagssonllamadosLayout
Renderersypuedenutilizarseparaagregarinformacincontextualdentrodeltextoenviado.

Loslayoutspuedenutilizarseenvarioslados;yaseaelformatoconelcuallainformacines
enviadaapantallaoaunarchivoocontrolarelnombredelarchivotambien.

Unejemplosencillo.Asumiendoqueparacadamensajesenviadosalaconsola,vamosanecesitar
mostrar:

Lafechayhoraactual
Elnombredelaclaseyelmtodoqueenvielmensaje
Elniveldelog
Unmensajeadicional

Ellayoutsera:

<targetname="c"xsi:type="Console"layout="${longdate}${callsite}${level}
${message}"/>

Tambinpodramosenviarcadamensajeaunarchivodistintosegnsuniveldelog:

<targetname="f"xsi:type="File"fileName="${logger}.txt"/>

Ensteultimoejemplosevelautilizacindelatributo${logger}comopartedelnombredel
archivodesalida,conlocualpodramostenercomoresultadolosiguiente:
Name.space.clase1.txt
Name.space.clase2.txt
Name.space.clase3.txt
Otro.name.space.clase1.txt

1.5.7 Inclusindearchivosexternos
Cuandolaaplicacincreceylaconfiguracinsevuelvecompleja,sedecidesepararelarchivode
configuracinenotrosmaspequeosparaunmejorcontrol.NLogproveeunmecanismoque
permitelainclusindeestosarchivospormediodelelemento<inlcudefile=>.Aqutambien(al
igualqueenlamayoradelosatributosdelarchivodeconfiguracin)esposibleincluirvalores
dinmicosutilizandolanotacin${},loqueharaposiblelainclusindedistintosarchivosbasados
enunapropiedaddeentorno.


Pgina12

Elsiguienteejemplodeconfiguracindemuestraesto,leyendoelnombredelarchivode
configuracinsegnlaPCdondeseestejecutandoelprograma.

<nlog>
...
<includefile="${basedir}/${machinename}.config"/>
...
</nlog>

Lasvariablespuedenserusadasparaescribirexpresionescomplejasorepetitivas(comonombres
dearchivo)deunamejormanera.Paradefinirunavariableseutilizalasiguientesintaxis:

<variablename="var"value="xxx"/>

Unavezquelavariableseencuentradefinida,podrutilizarseendistintoslayoututilizandola
sintaxis${var}comosedemuestraenelsiguienteejemplo:

<nlog>
<variablename="logDirectory"value="${basedir}/logs/${shortdate}"/>
<targets>
<targetname="arch1"xsi:type="File"
fileName="${logDirectory}/arch1.txt"/>
<targetname="arch2"xsi:type="File"
fileName="${logDirectory}/arch2.txt"/>
</targets>
</nlog>

1.5.8 Reconfiguracinautomtica
Elarchivodeconfiguracinesledoautomticamentealiniciodelaaplicacin.Cuandoseejecutan
procesoslargosdedepuracin(comoenserviciosdeWindowsoaplicacionesASP.NET),muchas
vecesesnecesarioincrementarelniveldelogsindetenerlaaplicacin.NLogmonitoreaelarchivo
deconfiguracinyvuelvealeerlocadavezqueelmismoesmodificado.Parahabilitareste
mecanismo,seagregaunparmetroalaconfiguracin:

<nlogautoReload="true">
...
</nlog>

Estareconfiguracintambinsoportalosarchivosexternosqueseincluyenmediante<include
file=>conlocual,cadavezquealgunodeestoscambia,laconfiguracincompletaesreleda.

1.5.9 Solucionarproblemasenellogging
Algunasvecessucedequelaaplicacinnogeneralosarchivosdelogs,ansuponiendoquehemos
configuradocorrectamentelosarchivos.Puedenexistirvariasrazonesporlacuallosarchivosnose
estnescribiendo.Lamscomnesunproblemasdepermisos.Usualmente,enASP.NETdondelos
procesosaspnet_wp.exeow3wp.exenotienenpermisosdeescrituraeneldirectoriodondeseest
intentandoguardarloslogs.
NLogestdiseadoparapasarporaltoestasexcepciones.Lossiguientescambiospuedenhacerse
paracambiarestecomportamientoyredirigirlosmensajes.

<nlogthrowExceptions="true"/>agregandoelatributothrowExceptionsenelarchivo
deconfiguracin,provocaqueNLognoenmascarelasexcepcionesdejandoqueseala
aplicacinquienlasmaneje.Esteatributoesmuytilenunentornodeproduccinpara

Pgina13

encontrarelproblemarpidamente.Serecomiendavolverestevalorafalseencuantoel
problemafuesolucionado.
<nloginternalLogFile="archivo.txt"/>agregandoelatributointernalLogFileenel
archivodeconfiguracin,obligaaNLogaescribiraqulosmensajesparaundebuginterno.Esto
incluyelasexcepcionesquepuedangenerarseduranteellogueo.
<nloginternalLogLevel="Trace|Debug|Info|Warn|Error|Fatal"/>Determinael
nivelinternodellogueo.Cuantomsaltoseaelnivel,menosdetalladoserelregistrointerno.
<nloginternalLogToConsole="false|true"/>envalosmensajesinternosdelogala
consola.
<nloginternalLogToConsoleError="false|true"/>envalosmensajesinternosde
logalasalidaestndar(stderr)

1.5.10 Procesamientoasincrnicoywrappers
NLogproveedistintoswrappersquepermitenmodificarlaformaenquelasalidaeshecha:
Procesamientoasincrnico(ejecutandoseenunthreadseparado)
Reintentoencasodeerror
Balancedecarga
Buffering
Filtros
Failover

Paradefinirunnuevowrapperaundestinoactual,bastaconagregarotronododedestinoaste.
Actualmentenohayunlmitedeprofundidaddeanidamiento.Porejemplo,paraagregarun
registroasincrnicoconreintento,elarchivodeconfiguracinquedaradelasiguientemanera:
<targets>
<targetname="n"xsi:type="AsyncWrapper">
<targetxsi:type="RetryingWrapper">
<targetxsi:type="File"fileName="${file}.txt"/>
</target>
</target>
</targets>

Debidoaqueelprocesamientoasincrnicoesalgocomn,NLogpuedehabilitarrapidamentea
todoslosdestinos.Simplementesecolocaelelemento<targetsasync="true">encada
target.

<nlog>
<targetsasync="true">
<!todoslosdestinosdeestaseccinsernasincrnicos>
</targets>
</nlog>

1.5.11 Defaultwrappers
Algunasvecesesnecesarioquetodoslostargetsseanmanejadosporunmismowrapper,por
ejemploparaagregarunbufferoreintentos.NLogproveelasintxis<defaultwrapper/>para
esto.Simplementeseagregaesteelementoalaseccin<targets/>ytodoslostargetssern
manejadosporelwrapperespecificado.

<nlog>
<targets>
<defaultwrapperxsi:type="BufferingWrapper"bufferSize="100"/>
<targetname="f1"xsi:type="File"fileName="f1.txt"/>
<targetname="f2"xsi:type="File"fileName="f2.txt"/>
</targets>

Pgina14

<targets>
<defaultwrapperxsi:type="AsyncWrapper">
<wrapperxsi:type="RetryingWrapper"/>
</defaultwrapper>
<targetname="n1"xsi:type="Network"address="tcp://localhost:4001"/>
<targetname="n2"xsi:type="Network"address="tcp://localhost:4002"/>
<targetname="n3"xsi:type="Network"address="tcp://localhost:4003"/>
</targets>
</nlog>

Enelejemploanteriorsedefinieron2archivosdistintos,conbuffer,enformaasincrnicaycon
reintento.

1.5.12 Defaulttargetparameters
Enformasimilaraloswrappers,NLogproveeeltag<defaulttargetparameters/>para
especificarvalorespordefaultparacadatarget.Porejemplo,sisedeseaquelosarchivossecierren
trascadagrabacin,seconfigurardelasiguientemanera:

<nlog>
<targets>
<targetname="f1"xsi:type="File"fileName="f1.txt"
keepFileOpen="false"/>
<targetname="f2"xsi:type="File"fileName="f2.txt"
keepFileOpen="false"/>
<targetname="f3"xsi:type="File"fileName="f3.txt"
keepFileOpen="false"/>
</targets>
</nlog>

Tambinesposibleconfigurarundefaultparatodoslostargetdeunasola
vez.

<nlog>
<targets>
<defaulttargetparametersxsi:type="File"keepFileOpen="false"/>
<targetname="f1"xsi:type="File"fileName="f1.txt"/>
<targetname="f2"xsi:type="File"fileName="f2.txt"/>
<targetname="f3"xsi:type="File"fileName="f3.txt"/>
</targets>
</nlog>

3. APIdeconfiguracin.
EsposibletambinconfigurarNLogdesdecdigo,parahacerestosedeberprocederdelasiguiente
manera:

1. CrearunobjetoLoggingConfigurationdondesellevaracabolaconfiguracin
2. CrearunoomasTargets(objetosqueheredandelaclaseTarget)
3. Setearlaspropiedadesdeestosobjetos
4. DefinirlasreglasdejoggingutilizandolosobjetosLoggingRuleyagregarlosalaconfiguracin
5. ActivarlaconfiguracinasignndolaalobjetoLogManager.Configuration

Ejemplo:Mltiplesdestinos

Esteejemplodemuestralacreacinde2destinosdistintos:Unoserlaconsola(utilizandocolores)yel
otrounarchivo.LasreglasestipularanquelosmensajesqueseenvenserndeltipoDebugosuperior

Pgina15

usingNLog;
usingNLog.Targets;
usingNLog.Config;
usingNLog.Win32.Targets;

internalclassExample
{
privatestaticvoidMain(string[]args)
{
//Paso1.Crearelobjetodeconfiguracin
LoggingConfigurationconfig=newLoggingConfiguration();

//Paso2.Crearlosobjetosdestinosyagregarlosalaconfiguracin
ColoredConsoleTargetconsoleTarget=newColoredConsoleTarget();
config.AddTarget("console",consoleTarget);

FileTargetfileTarget=newFileTarget();
config.AddTarget("file",fileTarget);

//Paso3.Setearlaspropiedades
consoleTarget.Layout="${date:format=HH\\:MM\\:ss}${logger}
${message}";
fileTarget.FileName="${basedir}/archivo.txt";
fileTarget.Layout="${message}";

//Paso4.Definirreglas
LoggingRulerule1=newLoggingRule("*",LogLevel.Debug,consoleTarget);
config.LoggingRules.Add(rule1);

LoggingRulerule2=newLoggingRule("*",LogLevel.Debug,fileTarget);
config.LoggingRules.Add(rule2);

//Paso5.Activarlaconfiguracin
LogManager.Configuration=config;

//Utilizacindelocreado

Loggerlogger=LogManager.GetLogger("Ejemplo");
logger.Trace(".NET>MensajeTrace");
logger.Debug(".NET>MensajeDebug");
logger.Info(".NET>MensajeInfo");
logger.Warn(".NET>MensajeWarning");
logger.Error(".NET>MensajeError");
logger.Fatal(".NET>MensajeErrorfatal(excepcin)");

MessageBox.Show("Testterminado");

}
}

Targets.
UnTargetseutilizaparamostrar,almacenaroenviaraotrodestinoellogdemensajes.Hay2tiposde
Targets;elquerecibeymanejalosmensajesyelquealmacenaorutealosmensajesaotroTarget,a
estosltimosselosllamawrappers

NLogproveeactualmentevariosdestinospredefinidos,aunqueesposibletambincrearlospropios.
Estosson:


Pgina16

AspNetTrace EnvamensajesdelogaASP.NETtrace
AspResponse EnvamensajesdelogutilizandoASPResponseobject
ColoredConsole Envamensajesdelogalaconsola,condistintoscolores
Console Envamensajesdeerroralaconsola
Database EnvamensajesdeerroraunatablautilizandoADO.NET
Debug Mocktarget tilparatesting
Debugger Envamensajesdeerroraundebuggeradministrado
EventLog Envamensajesdeerroralvisordeeventosdewindows
File Escribelosmensajesdelogenunoomsarchivos
FormControl EnvamensajesdelogaunapropiedadTextdeuncomponenteWinForm
LogReceiverService EnvamensajesdelogaNLogReceiverService(usandoWCFWebServices).
Mail EnvamensajesdelogporemailelprotocoloSMTP
Memory EscribelosmensajesdelogenunArrayListenmemoria
MessageBox Muestraunaventanaconelmensajedelog
MethodCall Llamaaunmtodoestticoporcadalog
MSMQ EnvaellogdemensajesalacolademensajesMSMQ
Network Envaellogdemensajesatravsdelared
Null Descartalosmensajesdeerror.Seutilizaparadepuracin
OutputDebugString EnvalosmensajesatravsdelaAPIWin32OutputDebugString()
PerfCounter Incrementaelcontadorderendimientoencadaescritura
RichTextBox EnvaellogdemensajesauncontrolRichTextBox.NET
Trace EnvaellogdemensajesatravsdelSystem.Diagnostics.Trace
WebService LlamaaunWebserviceespecificadoencadamensajedelog

AspNetTrace
Sintxis
<targets>
<targetxsi:type="AspNetTrace"name="String"layout="Layout"/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrla
estructura${longdate}|${level:uppercase=true}|${logger}|${message}

Ejemplo:
<?xmlversion="1.0"?>
<nlogxmlns="http://www.nlogproject.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<targets>
<targetname="aspnet"xsi:type="ASPNetTrace"layout="${logger}
${message}"/>
</targets>
<rules>
<loggername="*"minlevel="Debug"writeTo="aspnet"/>
</rules>
</nlog>

Encasodequererhacerestoenformaprogramtica,elejemploquedaradelasiguientemanera:

usingSystem;
usingSystem.Web;

usingNLog;
usingNLog.Targets;

namespaceSomeWebApplication
{
publicclassGlobal:System.Web.HttpApplication

Pgina17

{
//Esteeventoesejecutadocadavezquelaaplicacinwebseinicia
//loquelohaceunbuenlugarparaconfiguraresto
programticamente.
//Unaalternativaseracolocarestecdigoenunconstructor
esttico.
protectedvoidApplication_Start(Objectsender,EventArgse)
{
ASPNetTraceTargettarget=newASPNetTraceTarget();
target.Layout="${logger}${message}";
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target,
LogLevel.Debug);
}
}
}

AspResponceEstetargetseusarcuandoseutiliceASP(noASP.NET)
Sintxis
<targets>
<targetxsi:type="AspResponse"name="String"addComments="Boolean"
layout="Layout"/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
addComments="Boolean"Indicaqueseagregarancomentariosaloqueseloguea.
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}

Ejemplo:
<?xmlversion="1.0"?>
<nlogxmlns="http://www.nlogproject.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<targets>
<targetname="aspnet"xsi:type="ASPResponse"layout="${logger}
${message}"/>
</targets>
<rules>
<loggername="*"minlevel="Debug"writeTo="aspnet"/>
</rules>
</nlog>

ColoredConsole
Sintxis
<targets>
<targetxsi:type="ColoredConsole"
name="String"
layout="Layout"
header="Layout"
footer="Layout"
useDefaultRowHighlightingRules="Boolean"
errorStream="Boolean">
<highlightrowbackgroundColor="Enum"condition="Condition"
foregroundColor="Enum"/>
<!serepite>
<highlightwordbackgroundColor="Enum"foregroundColor="Enum"
ignoreCase="Boolean"
regex="String"text="String"wholeWords="Boolean"/>
<!serepite>
</target>
</targets>

Pgina18

Donde:
name="String"Eselnombrequeseledaraltarget
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}
header="Layout"Encabezado
footer="Layout"Pie
useDefaultRowHighlightingRules="Boolean"Indicasilafilaestariluminada.Pordefault=
true.Segnelniveldemensaje,loscolorespordefaultsern:

Losvaloresposiblesparaloscoloresson:
o BlackNegro(#000000).
o BlueAzul(#0000FF).
o CyanCian(#00FFFF).
o DarkBlueAzuloscuro(#000080).
o DarkCyanCianoscuro(#008080).
o DarkGrayGrisoscuro(#808080).
o DarkGreenVerdeoscuro(#008000).
o DarkMagentaMagentaoscuro(#800080).
o DarkRedRojooscuro(#800000).
o DarkYellowAmarillooscuro(#808000).
o GrayGris(#C0C0C0).
o GreenVerde(#00FF00).
o MagentaMagenta(#FF00FF).
o NoChangeNocambiaelcolor.
o RedRojo(#FF0000).
o WhiteBlanco(#FFFFFF).
o YellowAmarillo(#FFFF00).

Console
Sintxis
<targets>
<targetxsi:type="Console"
name="String"
layout="Layout"
footer="Layout"
header="Layout"
error="Boolean"/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}
header="Layout"Encabezado
footer="Layout"Pie
error="Boolean"Indicasilosmensajessernenviadosalasalidadeerroroalasalidaestndar.

Database
Condicin Colorfrente Colorfondo
Nivel== LogLevel.Fatal Red NoChange
Nivel== LogLevel.Error Yellow NoChange
Nivel== LogLevel.Warn Magenta NoChange
Nivel== LogLevel.Info White NoChange
Nivel== LogLevel.Debug Gray NoChange
Nivel== LogLevel.Trace DarkGray NoChange

Pgina19

Sintxis
<targets>
<targetxsi:type="Database"
name="String"
dbUserName="Layout"
dbProvider="String"
useTransactions="Boolean"
connectionStringName="String"
connectionString="Layout"
keepConnection="Boolean"
dbDatabase="Layout"
dbPassword="Layout"
dbHost="Layout"
installConnectionString="Layout"
commandText="Layout">
<installcommandcommandType="Enum"connectionString="Layout"
ignoreFailures="Boolean"
text="Layout"/>
<!serepite>
<uninstallcommandcommandType="Enum"connectionString="Layout"
ignoreFailures="Boolean"
text="Layout"/>
<!serepite>
<parameterlayout="Layout"name="String"precision="Byte"
scale="Byte"size="Integer"/>
<!serepite>
</target>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
dbUserName="Layout"Eselnombredeusuariodelabasededatos.Sielstringdeconexinnose
enva,seutilizarestavalorparaconstruirlo.
dbProvider="String"Nombredelprovider.NETqueseutilizarparaconectarse.
Pordefaultessqlserver.Elvalordeesteparmetrodebeserigualalregistradoenmachine.config
oapp.config.Losvaloresusadoscomnmenteson:

System.Data.SqlClient
System.Data.SqlServerCe.3.5
System.Data.OracleClient(descartadoin.NETFramework4)
Oracle.DataAccess.Client
System.Data.SQLite
Npgsql
MySql.Data.MySqlClient
sqlserver,mssql,microsoftomsdeSQLServerDataProvider
oledbOLEDBDataProvider
odbcODBCDataProvider
useTransactions="Boolean"Indicasisedebenusartransacciones(requeridoporalgunasbases
dedatos)
connectionStringName="String"Nombredelaconexin(Framework3.5omayor)
connectionString="Layout"Stringdeconexin.Cuandoseutilizestapropiedad,se
sobreescribiranlosvaloresespecificadosenDBHost,DBUsername,DBPasswordyDBDatabase.
keepConnection="Boolean"Indicasisemantendrlaconexinactivaentrecadaeventodelog.
dbDatabase="Layout"Nombredelabasededatos.SielatributoconnectionStringnoes
especificado,estevalorserutilizadoparalacreacindelstringdeconexin.
dbPassword="Layout"Passwordparalaconexin.SielatributoconnectionStringnoes
especificado,estevalorserutilizadoparalacreacindelstringdeconexin.

Pgina20

dbHost="Layout"Nombredelservidordondeseencuentralabasededatos.Sielatributo
connectionStringnoesespecificado,estevalorserutilizadoparalacreacindelstringde
conexin.

Debug
Sintxis
<targets>
<targetxsi:type="Debug"name="String"layout="Layout"/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}
header="Layout"Encabezado
footer="Layout"Pie

EventLog
Sintxis
<targets>
<targetxsi:type="EventLog"
name="String"
layout="Layout"
machineName="String"
source="String"
category="Layout"
eventId="Layout"
log="String"/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}
machineName="String"NombredelaPCdondeelservicioseestejecutando.
source="String"Origendeloseventos.
category="Layout"Niveldeevento
eventId="Layout"IDdecadaevento
log="String"Nombredelevento.Puedeserelsistema,aplicacinounnombrepredefinidopor
elusuario.Pordefaulteslaaplicacin.

File
Sintxis
<targets>
<targetxsi:type="File"
name="String"
layout="Layout"
header="Layout"
footer="Layout"
encoding="Encoding"
lineEnding="Enum"
archiveAboveSize="Long"
maxArchiveFiles="Integer"
archiveFileName="Layout"
archiveNumbering="Enum"
archiveEvery="Enum"
replaceFileContentsOnEachWrite="Boolean"
fileAttributes="Enum"
fileName="Layout"
deleteOldFileOnStartup="Boolean"

Pgina21

enableFileDelete="Boolean"
createDirs="Boolean"
concurrentWrites="Boolean"
openFileCacheTimeout="Integer"
openFileCacheSize="Integer"
networkWrites="Boolean"
concurrentWriteAttemptDelay="Integer"
concurrentWriteAttempts="Integer"
bufferSize="Integer"
autoFlush="Boolean"
keepFileOpen="Boolean"/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}
header="Layout"Encabezado
footer="Layout"Pie
encoding="Encoding"Tipodecodificacindelarchivo
lineEnding="Enum"Indicacomoserelfindelneasegnestosvaloresposibles.
CRInsertauncaracterASCII13despusdecadalnea
CRLFInsertalasecuenciaASCII13+ASCII10despusdecadalnea.
DefaultInsertaelfindelneadependiendolaplataformadondeestejecutndose.
LFInsertauncaracterASCII10despusdecadalnea.
NoneNoinsertanadaalfinaldecadalnea.
archiveAboveSize="Long"Tamaoenbytesapartirdelcuallosarchivosdelregistrose
archivarnautomticamente.Atencin:Habilitarstaopcinralentizarelloggingenescenarios
demultiproceso.Sisolounprocesoejecutarellog,debercolocarlapropiedad
ConcurrentWriteenfalseparaganarenperformance.
maxArchiveFiles="Integer"Mximacantidaddearchivosqueseguardarn
archiveFileName="Layout"Nombredelarchivo.Nota:Elnombredelarchivopuede
conteneruntextoespecial{####}queserreemplazadoporunasecuenciade
nmerosdependiendodelaestrategiadeguardadoquesehayaelegido.La
cantidadde#,indicalacantidaddecaracteresqueseutilizarnpara
numerarlosarchivos.
archiveNumbering="Enum"Utilizadoparanumerarlosarchivosdelogs.Los
valoresposiblesson:
o RollingComenzarsiempredesdecero,siendoelprimeroel#0,
despusel#1,hastael#n
o SequenceComenzarconelsiguientealarchivoconelvalormas
alto.
archiveEvery="Enum"(opcional)Indicaenqueformasearchivaranlosarchivos
delog.Losvaloresposiblesson:
o DaySearchivardiariamente
o HourSearchivarcadahora
o MinuteSearchivarcadaminuto
o MonthSearchivarmensualmente
o NoneNosearchivarbasadoeneltiempo
o YearSearchivaranualmente
Esteprocesoocurrecomopartedelaescrituradeloslogs,loqueralentizarelprocesode
logging.
replaceFileContentsOnEachWrite="Boolean"Indicasielloggeneradosobreescribirel
archivooagregalosdatosalfinaldeeste.Pordefault:false.
fileAttributes="Enum"Atributosdelosarchivos(solamenteparaMSWindows).Losvalores
posiblesson:
o Archiveellogdeberserarchivado
o Compressedcomprimeelcontenido
o DeleteOnCloseseborrarelarchivounavezcerrado

Pgina22

o Devicedispositivo
o Encryptedarchivoencriptado
o Hiddenarchivooculto
o NoBufferingSelesolicitaalSOquenocacheeelarchivo.
o Normalarchivonormal
o NotContentIndexedelarchivonoserindexadoporelserviciodeindexacinde
Windows
o PosixSemanticsseaccederalarchivosegnlasreglasdePosix
o ReparsePointpuntodeanlisis
o SparseFile(revisar)
o Systemarchivodesistema
o Temporarysetratarelarchivocomotemporal.Elmismoquedarenlamemoria
cacheynosegrabaradisco.
o WriteThroughleindicaalsistemaquenoutiliceningntipodememoriacachey
grabedirectamenteadisco
fileName="Layout"Nombredelarchivoquesegenerar
deleteOldFileOnStartup="Boolean"Indicasielarchivodelogserborradoantesdecomenzar.
Pordefault:false.Nota:Estosucederunicamentesielnombredelarchivoes
nicoenlapropiedadfileName.
enableFileDelete="Boolean"Indicasisedebeactivarelborradodelarchivoderegistro.Por
default:true
createDirs="Boolean"Indicasisedeberncrearlosdirectoriosdondelosarchivosdelogson
guardados.Pordefaut:true.Nota:desactivarestaopcinlograrganarperformance,perose
obtendrunerrorsieldirectorionoexiste.

Optimizacindelrendimiento

concurrentWrites="Boolean"Indicasilaescrituraserenformaconcurrente,pordistintos
procesosenunmismohost.Pordefault:true.
openFileCacheTimeout="Integer"Cantidadmximadesegundosenelqueelarchivose
mantendrabierto.Siestenmeroesnegativolosarchivosnosecerrarnenformaautomtica
despusdeunperododeinactividad.Default:1
openFileCacheSize="Integer"Cantidaddearchivosquesemantendrnabiertos.Aumentar
estevalormejorarlaperformancecuandounmismotargetescribeenvariosarchivosdelog
(comoporejemplo,enunadivisinporniveles).Default:5.Nota:Losarchivosson
utilizadosenformaLRU(leastrecentlyusemsantiguo),quedescartalos
archivosquenosehanutilizadoporundeterminadoperododetiempoantes
quelacachesellene.Estenmeronodeberasermayora1015,yaque
mantenernmerograndedearchivosabiertosconsumemuchosrecursosdel
sistema.
networkWrites="Boolean"Indicasielarchivodelogserescritopor
distintosprocesosendiferentesmquinasdelared.Pordefault:false.
Nota:Estaopcinimpidequelosarchivossemantenganabiertos.
concurrentWriteAttemptDelay="Integer"Tiempoenmilisegundosqueelprocesoesperar
antesdereintentarescribirenelarchivo.Pordefault:1.Nota:Elvaloractualdelaespera
esunnmeroentreceroyelindicadoporelparmetro.Cadavezquela
escriturafalleestenmeroseduplicar.Ejemplo:Suponiendoqueelvalorde
stapropiedadsea10,laesperaserunvaloralazarentre0y10,encaso
defallar,setomarunnuevovalorentre0y20,sifallaranuevamente,un
nmeroentre0y40,yassucesivamente.
concurrentWriteAttempts="Integer"Nmerodevecesquesereintentarescribirenel
archivoantesqueNLogdecidadescartarelregistro.Pordefault:10
bufferSize="Integer"Tamaodelbufferdellogenbytes.Pordefault:32768
autoFlush="Boolean"Indicasisevaciarelbufferluegodeescribircada
registro.
keepFileOpen="Boolean".Indicasisedebemantenerelarchivoabierto,envezde
abrirlo/cerrarlotrascadalogging.Default:false.Nota:Setearestapropiedadentruepara
lograrperformance.


Pgina23

Ejemplos:

Logsimple
Laformamssencilladeutilizaresgenerarunlogsimple.Paralograrestocolocarenelarchivode
configuracindelloglosiguiente:

<?xmlversion="1.0"?>
<nlogxmlns="http://www.nlogproject.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">

<targets>
<targetname="file"xsi:type="File"
layout="${longdate}${logger}${message}"
fileName="${basedir}/logs/logfile.txt"
keepFileOpen="false"
encoding="iso88592"/>
</targets>

<rules>
<loggername="*"minlevel="Debug"writeTo="file"/>
</rules>
</nlog>

Logporniveles
Unsolotargetesnecesarioparaescribirendistintosarchivossegnelniveldelog.Lasiguiente
configuracinprovocaqueloslogsseanescritosenlossiguientesarchivos:
o Trace.log
o Debug.log
o Info.log
o Warn.log
o Error.log
o Fatal.log

<?xmlversion="1.0"?>
<nlogxmlns="http://www.nlogproject.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">

<targets>
<targetname="file"xsi:type="File"
layout="${longdate}${logger}${message}"
fileName="${basedir}/${level}.log"/>
</targets>

<rules>
<loggername="*"minlevel="Debug"writeTo="file"/>
</rules>
</nlog>

4. Unarchivodelogdiario
Lasiguienteconfiguracingeneraunarchivodelogpordia,generandolossiguientesarchivos:
o 20110101.log
o 20110102.log
o 20110103.log
o

<?xmlversion="1.0"?>
<nlogxmlns="http://www.nlogproject.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">

Pgina24

<targets>
<targetname="file"xsi:type="File"
layout="${longdate}${logger}${message}"
fileName="${basedir}/${shortdate}.log"/>
</targets>

<rules>
<loggername="*"minlevel="Debug"writeTo="file"/>
</rules>
</nlog>

5. Logasincrnico
Dependiendoelescenario,esposibleagregareltargetAsyncWrapper.Deestaformaloslogsson
escritosenunthreadseparadodelthreadprincipalpudindosedesbloquearmasrpidamente.El
loggingasincrnicoesrecomendadoparaaplicacionesmultihiloqueseejecutanporunlargoperodo
detiempoynoesrecomendadoparaaplicacionesdelneadecomandoqueterminanrpidamente.

<?xmlversion="1.0"?>
<nlogxmlns="http://www.nlogproject.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">

<targets>
<!Generaellogenunhiloseparado,conpossibleesperadehasta
5000mensajes.Alterminarselaespera,losmensajessiguientes
sondescartados>

<targetname="file"xsi:type="AsyncWrapper"queueLimit="5000"
overflowAction="Discard">
<targetxsi:type="File"fileName="${basedir}/logs/${level}.txt"/>
</target>
</targets>

<rules>
<loggername="*"minlevel="Debug"writeTo="file"/>
</rules>
</nlog>

6. Logseparadoporcomas(CSV)
ParagenerarunarchivoCSV,seutilizaeltipodearchivoCsvlayout.Elarchivoresultantecontendr4
columnas,acordesalasreglasdeCSV

<?xmlversion="1.0"?>
<nlogxmlns="http://www.nlogproject.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<targets>
<targetname="csv"xsi:type="File"fileName="${basedir}/file.csv">
<layoutxsi:type="CSVLayout">
<columnname="time"layout="${longdate}"/>
<columnname="message"layout="${message}"/>
<columnname="logger"layout="${logger}"/>
<columnname="level"layout="${level}"/>
</layout>
</target>
</targets>

<rules>

Pgina25

<loggername="*"minlevel="Debug"writeTo="csv"/>
</rules>
</nlog>

7. Logbasadoeneltamaodelarchivo
Loslogspuedenserarchivadosautomticamentemovindolosaotrolugardependiendodeltamaodel
archivo.Lasiguienteconfiguracincreaunarchivologs/archivolog.txtquedespusserarchivadocomo
backup/log.00001.txt,backup/log.00002.txtyasisucesivamentecuandoellogprincipallleguea10
KB.

<?xmlversion="1.0"?>
<nlogxmlns="http://www.nlogproject.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<targets>
<targetname="file"xsi:type="File"
layout="${longdate}${logger}${message}"
fileName="${basedir}/logs/archivolog.txt"
archiveFileName="${basedir}/backup/log.{#####}.txt"
archiveAboveSize="10240"
archiveNumbering="Sequence"
concurrentWrites="true"
keepFileOpen="false"
encoding="iso88592"/>
</targets>
<rules>
<loggername="*"minlevel="Debug"writeTo="file"/>
</rules>
</nlog>

8. Basadoenlafecha
Loslogspuedenserarchivadosautomticamentesegnunafecha/hora.Estaconfiguracinarchivarel
logaliniciodecadada,utilizandounnombreincremental.Elprimerdaseguardarcomo
backup/log.00001.txt,elsegundodiacomobackup/log.00002.txt,yassucesivamente.Segnla
configuracinaquexpuesta,semantendrnunmximode7archivos,porloqueaquelloslogsmayores
a1semana,sernautomticamenteborrados.

<?xmlversion="1.0"?>
<nlogxmlns="http://www.nlogproject.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">

<targets>
<targetname="file"xsi:type="File"
layout="${longdate}${logger}${message}"
fileName="${basedir}/logs/archivolog.txt"
archiveFileName="${basedir}/backup/log.{#}.txt"
archiveEvery="Day"
archiveNumbering="Rolling"
maxArchiveFiles="7"
concurrentWrites="true"
keepFileOpen="false"
encoding="iso88592"/>
</targets>

<rules>
<loggername="*"minlevel="Debug"writeTo="file"/>
</rules>

Pgina26

</nlog>

9. FormControl
Sintxis
<targets>
<targetxsi:type="FormControl"
name="String"
layout="Layout"
append="Boolean"
controlName="String"
formName="String"/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}
append="Boolean"Indicasiellogagregalosdatosalfinaldelarchivoolossobreescribir.Por
default:true.
controlName="String"Nombredelcontrolquerecibirellog
formName="String"Nombredelformularioquecontienedichocontrol.

10. LogReciverService
Sintxis
<targets>
<targetxsi:type="LogReceiverService"
name="String"
endpointConfigurationName="String"
endpointAddress="String"
useBinaryEncoding="Boolean"
clientId="Layout">
<parameterlayout="Layout"name="String"type="System.Type"/>
<!serepite>
</target>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
endpointConfigurationName="String"NombredelEndPointenelarchivode
configuraciondeWCF.(ApartirdelFramework3.5)
endpointAddress="String"DireccindelendPoint.Obligatoria.
useBinaryEncoding="Boolean"Indicaquesedebeutilizarunacodificacindemensajesbinaria.
clientId="Layout"IDdelcliente.
ParameterListadeparmetros:
layout="Layout"Utilizadoparacalcularelvalordelparmetro
name="String"Nombredelparmetro
type="System.Type"Tipodelparmetro

Ejemplos:

Pasandoparmetros
LosparmetrossonpasadosaltargetLogReceiverServicedelWCFutilizandounaomslneascomo
lassiguientes:
<parametername="MiParametro"layout="MiValor"/>

Pgina27

<parametername="nlogdir"layout="${nlogdir}"/>

Aplicacinpararecibireventos
namespaceMyLogReceiverApp
{
usingSystem;
usingNLog;
usingNLog.LogReceiverService;

///<summary>
///Objetoquerecibeloslogs.
///</summary>
publicclassLogReceiverServer:ILogReceiverServer
{
publicvoidProcessLogMessages(NLogEventsnevents)
{
varevents=nevents.ToEventInfo("Client.");
Console.WriteLine("en:{0}{1}",nevents.Events.Length,
events.Count);

foreach(varevinevents)
{
varlogger=LogManager.GetLogger(ev.LoggerName);
logger.Log(ev);
}
}
}
}

Ylalinealogger.Log(ev);emitiracadaeventoauntargetdeterminadodefinidoenelservidor,
enelarchivoNLog.config

11. Mail
Sintxis
<targets>
<targetxsi:type="Mail"
name="String"
header="Layout"
footer="Layout"
layout="Layout"
html="Boolean"
addNewLines="Boolean"
encoding="Encoding"
subject="Layout"
to="Layout"
bcc="Layout"
cc="Layout"
from="Layout"
body="Layout"
smtpUserName="Layout"
enableSsl="Boolean"
smtpPassword="Layout"
smtpAuthentication="Enum"
smtpServer="Layout"
smtpPort="Integer"/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget

Pgina28

header="Layout"Encabezado
footer="Layout"Pie
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}
html="Boolean"IndicasilosmensajesseenviarnenformatoHTML.Pordefault:false
addNewLines="Boolean"Indicasientrecadalogseagregaunanuevalnea.Pordefault:false
encoding="Encoding"Tipodecodificacindelarchive
subject="Layout"EseltextoqueaparecerenelAsuntodelemail.Pordefault:Message
fromNLogon${machinename}
to="Layout"Direccionesdeemailsquerecibirnloslogs,separadasporcoma.Porejemplo:
sistemas@dominio.com.ar;brainwareargentina@yahoo.com.ar
bcc="Layout"Direccionesdeemailquerecibirnloslogsenformaoculta
cc="Layout"Direccionesdeemailquerecibirncopiadeloslogs
from="Layout"Direccindeemailqueenvaellog.
body="Layout"Cuerpodelmensaje.Pordefault:${message}
smtpUserName="Layout"ElnombredelusuarioparaconectarsealservidordeemailporSMTP.
UtilizadocuandoelvalordesmtpAuthenticationseencuentraenBasic
enableSsl="Boolean"IndicaqueSSL(SecureSocketsLayer)serutilizadoenlacomunicacincon
elservidorSMTP
smtpPassword="Layout"EslaclavedelusuarioparaconectarsealservidordeemailporSMTP.
UtilizadocuandoelvalordesmtpAuthenticationseencuentraenBasic
smtpAuthentication="Enum"IndicaelmododeautenticacinconelservidorSMTP.
o Basic
o None
o NTLM
smtpServer="Layout"ServidorSMTPquerecibirelemail
smtpPort="Integer"PuertoenelqueelservidordeSMPTestescuchando.Pordefault:25

12. Memory
Sintxis
<targets>
<targetxsi:type="Memory"name="String"layout="Layout"/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}

13. MessageBox
Sintxis
<targets>
<targetxsi:type="MessageBox"name="String"layout="Layout"caption="Layout"
/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}
caption="String"TtulodelMessageBox

Pgina29

14. MethodCall
Sintxis
<targets>
<targetxsi:type="MethodCall"
name="String"
methodName="String"
className="String">
<parameterlayout="Layout"name="String"type="System.Type"/>
<!serepite>
</target>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
methodName="String"Nombredelmtodo.Debeserpblicoyesttico.
className="String"Nombredelaclasequecontieneelmtodo.
ParameterListadeparmetros
layout="Layout"Utilizadoparacalcularelvalordelparmetro
name="String"Nombredelparmetro
type="System.Type"Tipodelparmetro

Ejemplos:

Loggingaunmtodoesttico
Paraenviartodosloslogsaunmtodoesttico,laconfiguracinsera:

<?xmlversion="1.0"?>
<nlogxmlns="http://www.nlogproject.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<targets>
<targetname="m"xsi:type="MethodCall"className="MiNameSpace.MiClase,
MiAssembly"methodName="MetodoALlamar">
<parameterlayout="${level}"/>
<parameterlayout="${message}"/>
</target>
</targets>

<rules>
<loggername="*"minlevel="Debug"writeTo="msgbox"/>
</rules>
</nlog>

Parastaconfiguracin,elmtodoaserllamadodebeestardeclaradoenelespaciodenombres
MiNameSpace,enlaclaseMiClaseylaclasedebeestarcompiladadentrodelassembly
MiAssembly.dll.Cadaparmetrodelmtododelogsedebecorresponderconelvalorde
<parameter>enlaconfiguracin.

namespaceMiNamespace
{
usingSystem;

publicclassMiClase
{
publicstaticvoidMetodoALlamar(stringlevel,stringmessage)
{
Console.WriteLine("l:{0}m:{1}",level,message);

Pgina30

}
}
}
Elnombredelosparmetrosnoesimportante,perosiloeselrden.Eltipodeparmetropor
defaultesstring,peropuedesersobreescritoagregandoelatributotypeacadaelemento.

TambinesposibledeconfigurarelloggingutilizandoelAPIdeconfiguracin.Porejemplo:
usingSystem;

usingNLog;
usingNLog.Targets;
usingSystem.Diagnostics;

publicclassEjemplo
{
publicstaticvoidMetodoALlamar(stringlevel,stringmessage)
{
Console.WriteLine("l:{0}m:{1}",level,message);
}

staticvoidMain(string[]args)
{
MethodCallTargettarget=newMethodCallTarget();
target.ClassName=typeof(Ejemplo).AssemblyQualifiedName;
target.MethodName="MetodoALlamar";
target.Parameters.Add(newMethodCallParameter("${level}"));
target.Parameters.Add(newMethodCallParameter("${message}"));

NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target,
LogLevel.Debug);

Loggerlogger=LogManager.GetLogger("Ejemplo");
logger.Debug("MensajedeDebug");
logger.Error("MensajedeError");
}
}

15. MSMQ
Sintxis
<targets>
<targetxsi:type="MSMQ"
name="String"
useXmlEncoding="Boolean"
encoding="Encoding"
layout="Layout"
recoverable="Boolean"
createQueueIfNotExists="Boolean"
label="Layout"
queue="Layout"/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
useXmlEncoding="Boolean"IndicaqueseutiliceelformatoXMLcuandoseserializeelmensaje.
Pordefault:false
encoding="Encoding"Codificacinqueseutilizarparaelmensaje.
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}
recoverable="Boolean"Indicasigarantizalaentregadelosmensajes.Pordefault:false

Pgina31

createQueueIfNotExists="Boolean"Indicasidebecrearunacoladeesperasilamismano
existe.Pordefault:false
label="Layout"Textoasociadoacadamensaje
queue="Layout"Nombredelacoladeesperaasociadaalmensaje.Esrequerida.

16. Network
Sintxis
<targets>
<targetxsi:type="Network"
name="String"
onOverflow="Enum"
newLine="Boolean"
layout="Layout"
maxMessageSize="Integer"
encoding="Encoding"
connectionCacheSize="Integer"
keepConnection="Boolean"
address="Layout"/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
onOverflow="Enum"Accinatomarsieltamaodelmensajeesmayoralindicadoen
maxMessageSize.Losvaloresposiblesson:
o DiscardDescartaelmensaje
o ErrorReportaunerror
o SplitDivideelmensajeenpartemenores
newLine="Boolean"Indicasiseagregarunalneanuevaalfinaldelmensaje.Pordefault:false
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}
maxMessageSize="Integer"tamaomximodelmensajeenbytes.Default:65000
encoding="Encoding"Codificacinutilizada.Pordefault:utf8

Opcionesdeconexin

connectionCacheSize="Integer"Tamaodelcachedeconexin.Nmerodeconexionesquese
mantendrnactivas.Pordefault:5
keepConnection="Boolean"mantenerlaconexinactivasiemprequeseaposible.
address="Layout"Direccindered.Lasdireccionesderedpuedenser:
o tcp://host:portTCP(autoselectIPv4/IPv6)
o tcp4://host:portforceTCP/IPv4
o tcp6://host:portforceTCP/IPv6
o udp://host:portUDP(autoselectIPv4/IPv6?
o udp4://host:portforceUDP/IPv4
o udp6://host:portforceUDP/IPv6
o ForHTTPSoportadoparaWebService.

17. Null
Sintxis
<targets>
<targetxsi:type="Null"name="String"formatMessage="Boolean"layout="Layout"
/>
</targets>


Pgina32

Donde:
name="String"Eselnombrequeseledaraltarget
formatMessage="Boolean"Indicasiseprocesareldiseo.Pordefault:false
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}

18. OutputDebugString
Sintxis
<targets>
<targetxsi:type="OutputDebugString"name="String"layout="Layout"/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}

19. OutputDebugString
Sintxis
<targets>
<targetxsi:type="PerfCounter"
name="String"
instanceName="String"
counterHelp="String"
counterType="Enum"
autoCreate="Boolean"
categoryName="String"
counterName="String"/>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
instanceName="String"Nombredelainstanciadelcontador
counterHelp="String"Textodeayuda
counterType="Enum"Tipodecontador,losvaloresposiblesson:
o AverageBase
o AverageCount64
o AverageTimer32
o CounterDelta32
o CounterDelta64
o CounterMultiBase
o CounterMultiTimer
o CounterMultiTimer100Ns
o CounterMultiTimer100NsInverse
o CounterMultiTimerInverse
o CounterTimer
o CounterTimerInverse
o CountPerTimeInterval32
o CountPerTimeInterval64
o ElapsedTime
o NumberOfItems32
o NumberOfItems64
o NumberOfItemsHEX32
o NumberOfItemsHEX64

Pgina33

o RateOfCountsPerSecond32
o RateOfCountsPerSecond64
o RawBase
o RawFraction
o SampleBase
o SampleCounter
o SampleFraction
o Timer100Ns
o Timer100NsInverse
autoCreate="Boolean"Indicasielcontadorderendimientosecreaautomticamente
categoryName="String"Nombredelacategoria
counterName="String"Nombredelcontador

20. RichTextBox
Sintxis
<targets>
<targetxsi:type="RichTextBox"
name="String"
layout="Layout"
height="Integer"
autoScroll="Boolean"
maxLines="Integer"
showMinimized="Boolean"
toolWindow="Boolean"
controlName="String"
formName="String"
width="Integer"
useDefaultRowColoringRules="Boolean">
<wordcoloringbackgroundColor="String"fontColor="String"
ignoreCase="Boolean"
regex="String"style="Enum"text="String"
wholeWords="Boolean"/>
<!serepite>
<rowcoloringbackgroundColor="String"condition="Condition"
fontColor="String"
style="Enum"/>
<!serepite>
</target>
</targets>

Donde:
name="String"Eselnombrequeseledaraltarget
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}
height="Integer"LaalturainicialdelRichTextBox
autoScroll="Boolean"Indicasilabarradescrollsemoverautomticamenteconcadanueva
lneadelog
maxLines="Integer"CantidadmximadelneasqueguardarelRichTextBox.Cuandoeste
nmerosesupere,laprimeralneaserborrada.
showMinimized="Boolean"Indicasialcrearseelform,aparecerminimizado.
toolWindow="Boolean"Indicasilaventanasecrearcomounaventanadeherramientas.
controlName="String"NombredelRichTextBoxdondeNLogescribir
formName="String"NombredelcontrolquecontendrelRichTextBox.Encasodenoexistirun
formabiertoconesenombre,NLoglocrear.
width="Integer"ElanchoinicialdelRichTextBox

Pgina34

wordColoringRules="Collection"Reglasquepermitirnqueciertaspalabrasaparezcan
resaltadasendistintoscolores.Cadanuevacollectionestarrepresentadaporunelemento<word
coloring/>quecontendrlossiguientesatributos:
backgroundColor="String"Colordefondo.Loscoloresseindicarndelamismaformaque
fueronexpresadosenColoredConsole.Encasodenodesearcambiarestecolor,elvalordeber
estarvaco.
fontColor="String"Colordelafuente.Loscoloresseindicarndelamismaformaque
fueronexpresadosenColoredConsole.Encasodenodesearcambiarestecolor,elvalordeber
estarvaco.Pordefault:vaco
ignoreCase="Boolean"Indicaquenosetendrnencuentalasmaysculas/minsculasal
comparartextos.Pordefault:false
regex="String"Textodelaexpresinregularqueaparecerresaltado.
style="Enum"Estilodelafuente,sonlosmismosqueSystem.Drawing.Losvaloresposibles
son:
o Bold
o Italic
o Regular
o Strikeout
o Underline
text="String"Textoabuscarqueaparecerresaltado.
wholeWords="Boolean"Indicaquebusquesolopalabrascompletas.Pordefault:false
useDefaultRowColoringRules="Boolean"Seutilizarnlasreglaspredeterminadas
<rowColoringRules/>Reglasdecolor.Coleccinconlossiguientesatributos.
backgroundColor="String"Colordefondo.Loscoloresseindicarndelamismaformaque
fueronexpresadosenColoredConsole.Encasodenodesearcambiarestecolor,elvalordeber
estarvaco.
condition="Condition"Condicinacumplirseparaqueelfontcambiedecolor.
fontColor="String"Colordelafuente.Loscoloresseindicarndelamismaformaque
fueronexpresadosenColoredConsole.Encasodenodesearcambiarestecolor,elvalordeber
estarvaco.Pordefault:vaco
style="Enum"Estilodelafuente,sonlosmismosqueSystem.Drawing.Losvaloresposibles
son:
o Bold
o Italic
o Regular
o Strikeout
o Underline

21. Trace
Sintxis
<targets>
<targetxsi:type="Trace"name="String"layout="Layout"/>
</targets>
Donde
name="String"Eselnombrequeseledaraltarget
layout="Layout"Eselformatoquetomarnlosmensajes.Pordefaulttendrlaestructura
${longdate}|${level:uppercase=true}|${logger}|${message}


Pgina35

22. WebService
Sintxis
<targets>
<targetxsi:type="WebService"
name="String"
encoding="Encoding"
url="System.Uri"
methodName="String"
namespace="String"
protocol="Enum">
<parameterlayout="Layout"name="String"type="System.Type"/>
<!serepite>
</target>
</targets>

Donde
name="String"Eselnombrequeseledaraltarget
encoding="Encoding"Tipodecodificacindelarchivo
<parameters/>Arraydeparmetrosquesepasarn.CadaCollectioncontendrlossiguientes
atributos.
layout="Layout"Eselformatoqueseusarparacalcularelvalordelparmetro.
name="String"Nombredelparmetro
type="System.Type"TipodeparmetrosegnlosespecificadoenSystem.Type
url="System.Uri"WebserviceURL
methodName="String"Nombredelmtodoainvocar
protocol="Enum"ProtocoloautilizarparallamaralWebService.
o HttpGet
o HttpPost
o Soap11
o Soap12
NOTA:Elwebservicedebeimplementarunmtodoquerecibaunarraydeparmetros.


Pgina36

23. Layouts
Unlayoutesunatributoqueseencuentraenlamayoradelostargetsydeterminaelformatoenelque
lainformacinserlogueada.Existenvariosformatospredefinidos.
Sinohayunformatoenelarchivodeconfiguracin,elquesetomarpordefaultesste:

layout="${longdate}|${level:uppercase=true}|${logger}|${message}

NLogtienelayoutspredefinidos,queson.
CsvLayout.FormatealoseventosenformatoCSV
LayoutWithHeaderAndFooter.Formateaeventosconencabezadosypiedepgina
Log4JXmlEventLayout.UtilizaelformatodeLog4Java
SimpleLayout.Unstringsimple

23.1 CsvLayout
Sintxis
<targets>
<target>
<layoutxsi:type="CsvLayout">
<!opcionesdelayout>
<layoutxsi:type="layoutType">Layout</layout>
<footerxsi:type="layoutType">Layout</footer>
<headerxsi:type="layoutType">Layout</header>

<!opcionesdeCSV>
<quoting>Enum</quoting>
<quoteChar>String</quoteChar>
<withHeader>Boolean</withHeader>
<customColumnDelimiter>String</customColumnDelimiter>
<delimiter>Enum</delimiter>
<columnlayout="Layout"name="String"/>
<!serepite>

</layout>
</target>
</targets>

Donde
<layout/>Cuerpodellayout.Puederepetirseenmltipleslneas.
<footer/>Piequeaparecerencadalayout
<header/>Encabezadoqueaparecerencadalayout
<quoting/>Mododeencomillado.Pordefault:Auto.Losvaloresposiblesson:
o AllTodaslascolumnas.
o AutoSololosvalorescontenidosenporseparador.
o NothingNada.
<quoteChar/>Carcterutilizadoenelencodillado.Pordefault:(comillasdobles)
<withHeader/>IndicasielarchivoCSVincluyeencabezado.
<customColumnDelimiter/>Stringutilizadoparadelimitarlascolumnas,soloposiblecuando
delimiterestseteadoenCustom.
<delimiter/>Delimitadordecolumna.Pordefault:Auto.Losvaloresposiblesson:
o AutoObtieneelvalordelaconfiguracinregional.
o CommaPorcoma(ASCII44).
o CustomElstringespecificadoencustomColumnDelimiter.
o PipePorPipe(ASCII124).
o SemicolonPorpuntoycoma(ASCII59).
o SpacePorespacios(ASCII32).

Pgina37

o TabPorTabs(ASCII9).
<column/>Arrayconlosparmetrosquesernpasados.Donde:
layout="Layout"Formatodelacolumna.Requerido.
name="String"Nombredelacolumna.

23.2 LayoutWithHeaderAndFooter
Sintxis
<targets>
<target>
<layoutxsi:type="LayoutWithHeaderAndFooter">
<!LayoutOptions>
<layoutxsi:type="layoutType">Layout</layout>
<headerxsi:type="layoutType">Layout</header>
<footerxsi:type="layoutType">Layout</footer>

</layout>
</target>
</targets>

Donde
<layout/>Cuerpodellayout.Puederepetirseenmltipleslneas.
<footer/>Piequeaparecerencadalayout
<header/>Encabezadoqueaparecerencadalayout

23.3 Layoutrenderers
Losrendererssonmacrosqueseutilizanparacolocardentrodeunlayoutyquecontienen
determinadainformacin.

${aspapplication} VariableASP.
${aspnetapplication} Variable ASP.NET.
${aspnetrequest} VariablerequestASP.NET
${aspnetsession} VariabledesesinASP.NET.
${aspnetsessionid} VariabledeIDdesesindeASP.NET.
${aspnetuserauthtype} VariabledeusuariodeASP.NET.
${aspnetuseridentity} VariabledeusuariodeASP.NET.
${asprequest} VariablerequestdeASP.
${aspsession} VariabledesesindeASP.
${basedir} Directoriodondelaaplicacinseestejecutando.
${callsite} Origen.Mtodoinicialquehizoelllamado.
${counter} Uncontadorqueseincrementaporcadalineadelog.
${date} Fechayhoraactual.
${documenturi} DireccindelapaginaHTMLquehosteaunaaplicacionSilverlight.
${environment} Variabledeentorno.
${eventcontext} Informacincontextual.Verejemploabajo(*)
${exception} Informacindeunaexcepcinprovistautilizandounallamadaalmtodo
Logger.Exception().
${filecontents} Muestraelcontenidodeunarchive
${gc} Brindainformacindelgarbagecollector.
${guid} Globallyuniqueidentifier(GUID).
${identity} Hilodeidentidaddeinformacin(nombreyautenticacin)
${installcontext} Parmetrosdeinstalacion(pasadosaInstallNLogConfig).
${level} Niveldelog.

Pgina38

${literal} Unstringcualquiera.
${logger} Nombredellogger
${longdate} Fechayhoraenformatolargo(yyyyMMddHH:mm:ss.mmm)
${machinename} ElnombredelaPCdondeseestejecutandoelproceso.
${message} Unmensajeformateadosegunreglasdellog.
${newline} Unalineaenblanco
${nlogdir} DirectoriodondelaDLLseencuentra.
${performancecounter} Uncontadordeperformance.
${processid} Unidentificadordelprocesoactual
${processinfo} Informacindelprocesoqueseestejecutando
${processname} Elnombredelproceso.
${processtime} TiempodeprocesamientoenformatoHH:mm:ss.mmm.
${qpc} Untimerdealtaprecisionbasadoenelvalordevueltoporlafunction
QueryPerformanceCounter()opcionalmenteconvertidoasegundos.
${registry} Unvalordelregistro.
${shortdate} Fechaenformatocorto(yyyyMMdd)
${sl*appinfo} InformacindelaaplicacionSilverlight.
${specialfolder} InformacindedirectoriosespecialesdeWindows(Misdocumentos,Mi
musica,Archivosdeprograma,Escritorio,etc).Lalistacompleta:
http://msdn2.microsoft.com/enus/system.environment.specialfolder.aspx
${stacktrace} Seguimientodelrender.
${tempdir} Directoriotemporal
${threadid} Unidentificadordelthreadactual
${threadname} Elnombredelthreadactual
${ticks} ElvalorenTicksdelafechayhoraactual.
${windowsidentity} Informacindelthreaddeidentidaddewindows.
${lowercase} Conviertelasalidadellayoutaminsculas.
${pad} Agregaespaciosallayout
${replace} Reemplazaunstringporotro
${rot13} DecodificaunstringcodificadoconROT13
${trimwhitespace} Quitalosespaciossobrantes
${uppercase} Conviertelasalidadellayoutamaysculas
${urlencode} CodificalasalidaparapoderutilizarlaenunaURL
${xmlencode} Convierteelresultado alaespecificacindeXML

(*)Aunqueexistenvariosrenderizadorespredefinidos,esposiblequedeseeenviarunvalorpropioal
layout.EstopodrhacerloconunallamadaalmtodoContext.Aquunejemplo:
EnunaclaseenC#,creeuneventoyagregueloaldiccionario,deestaforma:

...
Loggerlog=LogManager.GetCurrentClassLogger();
LogEventInfotheEvent=newLogEventInfo(LogLevel.Debug,"","Unvalorpropio");
theEvent.Properties["MiValor"]="Unstringpropio";
theEvent.Context["UnaRespuesta"]=42;
log.Log(theEvent);
...

Yenelarchivodeconfiguracin:

${eventcontext:item=MiValor}mostrar"Unstringpropio"
${eventcontext:item=UnaRespuesta}mostrar"42"


Pgina39

24 Filtros
Losfiltrosdanlaposibilidaddeeliminarmensajesdeloslogs,losactualmentesoportadosson:
24.1 WHEN
Sintxis
<rules>
<logger...="">
<whencondition="Condition"action="Enum"/>
</logger>
</rules>

Donde
action="Enum"Accinatomarsiseproducelacondition.Losvaloresposiblesson:
IgnoreElmensajenoseralogueado.
IgnoreFinalElmensajenoseralogueadoyelprocesoterminado.
LogElmensajeseralogueado.
LogFinalElmensajeseralogueadoyelprocesoterminado.
NeutralElfiltronoharnada.

condition="Condition"Esunaexpresindecondicin.Obligatoriaencasodeagregarseeste
atributo.Lascondicionessonfiltrosqueseevaluarnantesdegenerarcadalineadelog.Poseenun
pequeolenguajeconlassiguientesexpresiones:

Operadoresrelacionales:==,!=,<,<=,>=and>
operadoreslgicos:and,or,not
stringquesernevaluadoscomolayouts'${texto}'
operadoreslgicos:trueandfalse
numricos12345(entero)y12345.678(flotante)
NivelesdelogLogLevel.Trace,LogLevel.Debug,...LogLevel.Fatal
Palabrasclavespredefinidasparaaccederalaspropiedadesdeeventosmsutilizadas.
Corchetesparaasignarprioridadesoevaluarexpresionesjuntas
Funcionescondicionales

Tambinespossibleutilizaralgunasfunciones,asaber:
contains(s1,s2)Determinasielstrings2seencuentracontenidoporelstrings1.
endswith(s1,s2)DeterminasielSegundostring,esunsufijodelprimero
equals(o1,o2)Comparadosobjetos.
length(s)Devuelveellargodelstring
startswith(s1,s2)Determinasielsegundostring,esunprefijodelprimero.

Ejemplo:
<rules>
<loggername="*"writeTo="file">
<filters>
<whencondition="length(message)>100"action="Ignore"/>
<whencondition="equals('${logger}','MiApp.AlgunaClase')"action="Ignore"
/>
<whencondition="(level>=LogLevel.Debugand
contains(message,'NoLoguearEsto'))orlevel==LogLevel.Warn"action="Ignore"/>
<whencondition="notstartswith('${message}','EstoSi')"action="Ignore"/>
</filters>
</logger>
</rules>

Encasodenecesitarseagregarnuevasfunciones,stasdebernincorporarseenelarchivo
ConditionMethodAttribute.cs.

S-ar putea să vă placă și