Configurar seguimiento
En este tema se describe cómo se puede habilitar el seguimiento, configurar los orígenes de seguimiento para emitir trazas y establecer niveles de seguimiento, establecer el seguimiento y la propagación de actividades para admitir la correlación de seguimiento de un extremo a otro, y establecer escuchas de seguimiento para tener acceso a las trazas.
Para obtener recomendaciones de configuración de la característica de seguimiento en el entorno de producción o depuración, consulte Configuración recomendada para el seguimiento y el registro de mensajes.
Importante
En Windows 8 debe ejecutar la aplicación elevada (ejecutar como administrador) para que la aplicación genere los registros de seguimiento.
La habilitación del seguimiento
En la infraestructura de Windows Communication Foundation (WCF), se generan los siguientes datos para el seguimiento de diagnósticos:
Seguimientos de los hitos del proceso en todos los componentes de las aplicaciones, como las llamadas de la operación, las excepciones de código, las advertencias y otros eventos de procesamiento significativos.
Eventos de error de Windows cuando la característica de seguimiento no funciona bien. Consulte Registro de eventos.
El seguimiento de WCF se basa en System.Diagnostics. Para usar el seguimiento, debe definir los orígenes de seguimiento en el archivo de configuración o en el código. En el motor WCF, se define un origen de seguimiento para cada ensamblado de WCF. El origen de seguimiento System.ServiceModel
es el origen de seguimiento de WCF más general y, en este, se graban los hitos de procesamiento de la pila de comunicación de WCF, desde el transporte de entrada y salida hasta el código de usuario de entrada y salida. El origen de seguimiento System.ServiceModel.MessageLogging
graba todos los mensajes que fluyen a través del sistema.
De forma predeterminada, el seguimiento no está habilitado. Para activar la característica de seguimiento, deberá crear una escucha de seguimiento y establecer un nivel de seguimiento diferente a "Off" en el origen de seguimiento que seleccione en la configuración; de lo contrario, no se generará ninguna traza en el motor WCF. Si no especifica una escucha, el seguimiento se deshabilita automáticamente. Si se define una escucha pero no se especifica ningún nivel, el nivel se establece de forma predeterminada en "Off", lo que significa que no se emite ningún seguimiento.
Si utiliza puntos de extensibilidad de WCF, como invocadores de operación personalizados, deberá emitir sus propios seguimientos. Esto se debe a que, si implementa un punto de extensibilidad, ya no se podrán emitir los seguimientos estándar en la ruta de acceso predeterminada de WCF. Si no implementa la compatibilidad con el seguimiento manual mediante la emisión de seguimientos, puede que no vea los seguimientos que espera.
Para configurar la característica de seguimiento, puede editar el archivo de configuración de la aplicación; Web.config en el caso de las aplicaciones hospedadas en Web o Appname.exe.config en el caso de las aplicaciones autohospedadas. A continuación se muestra un ejemplo de dicha modificación: Para obtener más información sobre esta configuración, vea la sección "Configuración de escuchas para que se consuman seguimientos".
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
Nota
Para editar el archivo de configuración de un proyecto de servicio WCF en Visual Studio, haga clic con el botón secundario en el archivo de configuración de la aplicación (Web.config en el caso de las aplicaciones hospedadas en web o Appname.exe.config en el caso de las aplicaciones autohospedadas) en el Explorador de soluciones. Después, seleccione el elemento de menú contextual Editar configuración de WCF. A continuación, se iniciará la Herramienta del editor de configuración (SvcConfigEditor.exe), que puede usarse para crear y modificar la configuración de los servicios WCF mediante una interfaz gráfica de usuario.
Configurar los orígenes de seguimiento para emitir trazas
En el motor WCF, se define un origen de seguimiento para cada ensamblado. Las escuchas definidas para ese origen tienen acceso a las trazas generadas dentro de un ensamblado. Se definen los orígenes de seguimiento siguientes:
System.ServiceModel: en este origen, se registran todas las fases de procesamiento de WCF, cada vez que se lee una configuración, cada vez que se procesa un mensaje en el transporte, el procesamiento de la seguridad, cada vez que se envía un mensaje mediante código de usuario, etc.
System.ServiceModel.MessageLogging: Registra todos los mensajes que fluyen a través del sistema.
System.IdentityModel.
System.ServiceModel.Activation.
System.IO.Log: Registro para la interfaz .NET Framework al Sistema de archivos de registro comunes (CLFS).
System.Runtime.Serialization: Se registra cuando los objetos se leen o escriben.
CardSpace.
Puede configurar cada origen de seguimiento de manera que se utilice la misma escucha (compartida), como se indica en el ejemplo de configuración siguiente.
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="CardSpace">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.IO.Log">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.Runtime.Serialization">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.IdentityModel">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\log\Traces.svclog" />
</sharedListeners>
</system.diagnostics>
</configuration>
Además, puede agregar orígenes de seguimiento definidos por el usuario, como se muestra en el ejemplo siguiente, para emitir trazas de código de usuario.
<system.diagnostics>
<sources>
<source name="UserTraceSource" switchValue="Warning, ActivityTracing" >
<listeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\logs\UserTraces.svclog" />
</listeners>
</source>
</sources>
<trace autoflush="true" />
</system.diagnostics>
Para obtener más información sobre cómo crear orígenes de seguimiento definidos por el usuario, consulte Extensión del seguimiento.
Configurar las escuchas para consumir trazas
En tiempo de ejecución, los datos de seguimiento se envían desde WCF hasta las escuchas, donde estos se procesan. En el motor WCF se proporcionan varios agentes de escucha predefinidos para System.Diagnostics, que difieren en el formato que se usa en su resultado. También puede agregar tipos de escucha personalizados.
Puede utilizar add
para especificar el nombre y tipo de agente de escucha de seguimiento que desea utilizar. En nuestra configuración de ejemplo, hemos llamado traceListener
al agente de escucha y hemos agregado el agente de escucha de seguimiento estándar de .NET Framework (System.Diagnostics.XmlWriterTraceListener
) como el tipo que deseamos utilizar. Puede agregar cualquier número de escuchas de seguimiento para cada origen. Si la escucha de seguimiento emite el seguimiento a un archivo, debe especificar la ubicación del archivo de salida y el nombre en el archivo de configuración. Esto se hace estableciendo initializeData
en el nombre del archivo para esa escucha. Si no especifica un nombre de archivo, se genera un nombre de archivo aleatorio basado en el tipo de escucha utilizado. Si se utiliza XmlWriterTraceListener, se genera un nombre de archivo sin extensión. Si implementa una escucha personalizada, también puede utilizar este atributo para recibir datos de inicialización distintos de un nombre de archivo. Por ejemplo, puede especificar un identificador de la base de datos para este atributo.
Puede configurar una escucha de seguimiento personalizada para enviar las trazas en la conexión, por ejemplo, a una base de datos remota. Como un implementador de la aplicación, debería exigir un control de acceso apropiado en los registros de seguimiento en el equipo remoto.
También puede configurar mediante programación una escucha de seguimiento. Para obtener más información, consulte Procedimiento para crear e inicializar escuchas de seguimiento y Creación de una escucha de seguimientos personalizada.
Precaución
Puesto que System.Diagnostics.XmlWriterTraceListener
no es seguro para subprocesos, el origen de seguimiento puede bloquear los recursos de forma exclusiva al generar trazas. Cuando muchos subprocesos generan trazas para un origen de seguimiento configurado para utilizar esta escucha, puede producirse una contención de recursos, que genera un problema de rendimiento importante. Para solucionar este problema, debería implementar una escucha personalizada que sea segura para subprocesos.
Nivel de seguimiento
El nivel de seguimiento está controlado por el valor switchValue
del origen de seguimiento. En la siguiente tabla se describen los niveles de seguimiento disponibles.
Nivel de seguimiento | Naturaleza de los eventos seguidos | Contenido de los eventos seguidos | Eventos de los que se realiza un seguimiento | Destino del usuario |
---|---|---|---|---|
Desactivado | N/D | N/D | No se emiten seguimientos. | N/D |
Crítico | Eventos "negativos": eventos que se usan para indicar que ha ocurrido un procesamiento inesperado o que existe una condición de error. | Se registran las excepciones no controladas, incluidas las siguientes: - OutOfMemoryException. - ThreadAbortException (el motor CLR invoca a cualquier ThreadAbortExceptionHandler). - StackOverflowException (no se puede detectar). - ConfigurationErrorsException. - SEHException. - Errores de inicio de aplicación. - Eventos Failfast. - Bloqueos del sistema. - Mensajes dudosos: seguimientos de los mensajes que hacen que se produzca un error en la aplicación. |
Administradores Desarrolladores de aplicaciones |
|
Error | Eventos "negativos": eventos que se usan para indicar que ha ocurrido un procesamiento inesperado o que existe una condición de error. | Se ha producido un procesamiento inesperado. La aplicación no pudo realizar una tarea como se esperaba. Sin embargo, la aplicación todavía está en funcionamiento y ejecutándose. | Se registran todas las excepciones. | Administradores Desarrolladores de aplicaciones |
Advertencia | Eventos "negativos": eventos que se usan para indicar que ha ocurrido un procesamiento inesperado o que existe una condición de error. | Se ha producido o puede producirse un posible problema, pero la aplicación todavía funciona correctamente. Sin embargo, puede no continuar funcionando correctamente. | - Casos en los que la aplicación está recibiendo más solicitudes de las que se permiten en sus valores de limitación de peticiones. - Casos en los que se está a punto de alcanzar la capacidad máxima configurada de la cola receptora. - Casos en los que se ha superado el tiempo de espera. - Casos en los que se rechazan las credenciales. |
Administradores Desarrolladores de aplicaciones |
Información | Eventos "positivos": eventos que marcan hitos correctos. | Hitos importantes y correctos de ejecución de la aplicación, independientemente de si la aplicación funciona correctamente o no. | En general, se generan mensajes útiles para supervisar y diagnosticar el estado del sistema, medir el rendimiento o el perfil. Puede usar esta información para la planeación de la capacidad y la administración del rendimiento: - Casos en los que se crean canales. - Casos en los que se crean escuchas de un punto de conexión. - Casos en los que se un mensaje entra o abandona el transporte. - Casos en los que se recupera un token de seguridad. - Casos en los que se lee un valor de configuración. |
Administradores Desarrolladores de aplicaciones Desarrolladores de productos. |
Verbose | Eventos "positivos": eventos que marcan hitos correctos. | Se emiten eventos de bajo nivel tanto para el código de usuario como para el servicio. | En general, puede utilizar este nivel para depuración u optimización de la aplicación. - Casos en los que se comprendió el encabezado de un mensaje. |
Administradores Desarrolladores de aplicaciones Desarrolladores de productos. |
ActivityTracing | Transmitir eventos entre actividades de procesamiento y componentes. | Este nivel permite a los administradores y programadores poner en correlación las aplicaciones que se encuentran en el mismo dominio de aplicación: - Seguimientos de los límites de actividades, como el inicio o la detención de estas. - Seguimientos de transferencias. |
All | |
All | La aplicación puede funcionar correctamente. Se emiten todos los eventos. | Todos los eventos anteriores. | Todo |
Los niveles de Detallado a Crítico se apilan unos encima de otros, es decir, cada nivel de seguimiento incluye todos los niveles anteriores él excepto el nivel Off. Por ejemplo, una escucha que realiza escuchas en el nivel de advertencia recibe trazas de Crítico, Error, y Advertencia. Todos los niveles incluye los eventos de Detallado a Crítico y eventos de seguimiento de actividad.
Precaución
Los niveles de Información, Detallado, y ActivityTracing generan muchas trazas, lo que puede afectar negativamente al rendimiento de los mensajes si ha agotado todos los recursos disponibles en el equipo.
Configurar el seguimiento de actividad y la propagación para la correlación
El valor activityTracing
especificado para el atributo switchValue
se utiliza para habilitar el seguimiento de actividad, que emite las trazas para los límites de actividad y las transferencias dentro de los puntos de conexión.
Nota
Al usar ciertas características de extensibilidad en WCF mientras la característica de seguimiento de actividades está habilitada, podría iniciarse una excepción NullReferenceException. Para solucionar este problema, compruebe el archivo de configuración de la aplicación y asegúrese de que el atributo switchValue
para el origen de seguimiento de traza no está establecido en activityTracing
.
El atributo propagateActivity
indica si la actividad se debería propagar a otros extremos que participan en el intercambio de mensajes. Estableciendo este valor en true
, puede coger archivos de seguimiento generados por dos puntos de conexión cualesquiera y observar cómo un conjunto de trazas en un punto de conexión fluyó a un conjunto de rastros de otro punto de conexión.
Para obtener más información sobre el seguimiento y la propagación de actividades, consulte Propagación.
Los valores booleanos propagateActivity
y ActivityTracing
se aplican al origen de seguimientos System.ServiceModel. El valor ActivityTracing
también se aplica a cualquier origen de seguimientos, entre los que se incluyen los que se definen en WCF o los que define el usuario.
No puede utilizar el atributo propagateActivity
con orígenes de seguimiento definidos por el usuario. Para la propagación del identificador de actividad de código de usuario, asegúrese de no establecer ServiceModel ActivityTracing
, mientras todavía tenga el atributo ServiceModel propagateActivity
establecido en true
.