Mensajes Log4Net" No se pudo encontrar la información del esquema"


Decidí usar log4net como logger para un nuevo proyecto webservice. Todo está funcionando bien, pero recibo muchos mensajes como el de abajo, por cada etiqueta log4net que estoy usando en mi web.config:

No se pudo encontrar la información del esquema para el elemento 'log4net'...

Abajo están las partes relevantes de mi web.config:

  <configSections>
    <section name="log4net" 
        type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="C:\log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="100KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level: %message%newline" />
      </layout>
    </appender>
    <logger name="TIMServerLog">
      <level value="DEBUG" />
      <appender-ref ref="RollingFileAppender" />
    </logger>
  </log4net>

Resuelto:

  1. Copie cada etiqueta específica de log4net en un archivo xml separado. Asegúrese de usar .xml como archivo ampliación.
  2. Añádase la siguiente línea a AssemblyInfo.cs:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "xmlFile.xml", Watch = true)]

Nemo añadido:

Solo una palabra de advertencia a cualquiera siga los consejos de las respuestas en este hilo. Hay un posible riesgo de seguridad al tener log4net configuración en un xml desde la raíz del servicio web, como será accesible a cualquier persona de forma predeterminada. Simplemente tenga en cuenta si su configuración contiene datos confidenciales, es posible que desee para decirlo de otra manera donde.


@wcm: Intenté usar un archivo separado. He añadido la siguiente línea a AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

Y poner todo lo relacionado con log4net en ese archivo, pero todavía recibo los mismos mensajes.

Author: Community, 2008-10-06

13 answers

Tenía una toma diferente, y necesitaba la siguiente sintaxis:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml", Watch = true)]

Que difiere del último post de xsl, pero hizo una diferencia para mí. Echa un vistazo a esta entrada de blog, me ayudó.

 17
Author: steve_mtl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-06 20:43:56

Puede enlazar en un esquema al elemento log4net. Hay algunos flotando alrededor, la mayoría no proporcionan completamente para las diversas opciones disponibles. He creado el siguiente xsd para proporcionar tanta verificación como sea posible: http://csharptest.net/downloads/schema/log4net.xsd

Puede vincularlo al xml fácilmente modificando el elemento log4net:

<log4net 
     xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 67
Author: Kevin Panko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-24 15:34:06

Solo una palabra de advertencia para cualquiera siga el consejo de las respuestas en este hilo. Existe un posible riesgo de seguridad al tener la configuración de log4net en un xml fuera de la raíz del servicio web, ya que será accesible para cualquier persona de forma predeterminada. Solo tenga en cuenta si su configuración contiene datos confidenciales, es posible que desee ponerlo en otro lugar.

 9
Author: James McMahon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-24 20:07:50

Creo que está viendo el mensaje porque Visual Studio no sabe cómo validar la sección log4net del archivo de configuración. Debería ser capaz de solucionar esto copiando el log4net XSD en C:\Program Files \ Microsoft Visual Studio 8 \ XML \ Schemas (o donde esté instalado Visual Studio). Como ventaja adicional, ahora debería obtener soporte intellisense para log4net

 5
Author: Wheelie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-06 14:33:14

En realidad no es necesario atenerse a la .extensión xml. Puede especificar cualquier otra extensión en el atributo ConfigFileExtension:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension=".config", Watch = true)]
 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-24 09:16:56

@steve_mtl: Cambiar las extensiones de archivo de .config a .xml solucionó el problema. Agradecer.

@Wheelie: No pude probar tu sugerencia, porque necesitaba una solución que funcione con una instalación de Visual Studio sin modificaciones.


Para resumirlo, aquí está cómo resolver el problema:

  1. Copie cada etiqueta específica de log4net en un archivo xml separado. Asegúrese de usar .xml como extensión de archivo.
  2. Añadir la siguiente línea a AssemblyInfo.cs:

    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "xmlFile.xml", Watch = true)]

 2
Author: xsl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-07 07:37:57

Para VS2008 simplemente agregue la log4net.el archivo xsd a su proyecto; VS se ve en la carpeta del proyecto, así como en el directorio de instalación que Wheelie mencionó.

También, usando a .config extensión en lugar de .xml evita el problema de seguridad ya que IIS no sirve *.archivos de configuración por defecto.

 2
Author: devstuff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-12 07:39:24

En La respuesta de Roger , donde proporcionó un esquema, esto funcionó muy bien para mí, excepto cuando un comentarista mencionó

Este XSD se queja del uso de appenders personalizados. Solo permite un appender del conjunto predeterminado (definido como una enumeración) en lugar de simplemente convertirlo en un campo de cadena

He modificado el esquema original que tenía un xs:simpletype denominado log4netAppenderTypes y quita las enumeraciones. En su lugar, lo restringí a un patrón básico de escritura. NET (digo básico porque solo soporta typename, o typename, assembly however sin embargo alguien puede extenderlo.

Simplemente reemplace la definición log4netAppenderTypes con lo siguiente en el XSD:

<xs:simpleType name="log4netAppenderTypes">
  <xs:restriction base="xs:string">
    <xs:pattern value="[A-Za-z_]\w*(\.[A-Za-z_]\w*)+(\s*,\s*[A-Za-z_]\w*(\.[A-Za-z_]\w*)+)?"/>
  </xs:restriction>
</xs:simpleType>

Estoy pasando esto de nuevo al autor original si quiere incluirlo en su versión oficial. Hasta entonces tendrías que descargar y modificar el xsd y referenciarlo de una manera relativa, por ejemplo:

<log4net
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="../../../Dependencies/log4net/log4net.xsd">
  <!-- ... -->
</log4net>
 2
Author: Kit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:55:19

¿Ha intentado usar una log4net separada?archivo de configuración?

 1
Author: wcm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-06 14:21:32

Tengo un proyecto asp de prueba para construir colocando el archivo xsd en la carpeta de esquemas de visual studio como se describió anteriormente (para mí es C:\Program Files \ Microsoft Visual Studio 8 \ XML \ Schemas) y luego hacer que mi web.config se vea así:

<?xml version="1.0"?>
<!-- 
    Note: As an alternative to hand editing this file you can use the 
    web admin tool to configure settings for your application. Use
    the Website->Asp.Net Configuration option in Visual Studio.
    A full list of settings and comments can be found in 
    machine.config.comments usually located in 
    \Windows\Microsoft.Net\Framework\v2.x\Config 
-->
<configuration>
  <configSections>


    <section  name="log4net" 
              type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

  </configSections>
  <appSettings>

  </appSettings>
  <connectionStrings>

  </connectionStrings>
  <system.web>
    <trace enabled="true" pageOutput="true"  />
    <!-- 
            Set compilation debug="true" to insert debugging 
            symbols into the compiled page. Because this 
            affects performance, set this value to true only 
            during development.
        -->
    <compilation debug="true" />
    <!--
            The <authentication> section enables configuration 
            of the security authentication mode used by 
            ASP.NET to identify an incoming user. 
        -->
    <authentication mode="Windows" />

    <customErrors mode="Off"/>
    <!--
      <customErrors mode="Off"/>

            The <customErrors> section enables configuration 
            of what to do if/when an unhandled error occurs 
            during the execution of a request. Specifically, 
            it enables developers to configure html error pages 
            to be displayed in place of a error stack trace.

    <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
      <error statusCode="403" redirect="NoAccess.htm" />
      <error statusCode="404" redirect="FileNotFound.htm" />
    </customErrors>
        -->





  </system.web>
    <log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <!-- Please make shure the ..\\Logs directory exists! -->
      <param name="File" value="Logs\\Log4Net.log"/>
      <!--<param name="AppendToFile" value="true"/>-->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
      </layout>
    </appender>
    <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
      <to value="" />
      <from value="" />
      <subject value="" />
      <smtpHost value="" />
      <bufferSize value="512" />
      <lossy value="true" />
      <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
      </evaluator>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level %logger [%property] - %message%newline%newline%newline" />
      </layout>
    </appender>

    <logger name="File">
      <level value="ALL" />
      <appender-ref ref="LogFileAppender" />
    </logger>
    <logger name="EmailLog">
      <level value="ALL" />
      <appender-ref ref="SmtpAppender" />
    </logger>
  </log4net>
</configuration>
 1
Author: Philipp M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-18 09:06:30

Sin modificar su instalación de Visual Studio, y para tener en cuenta el control de versiones adecuado/etc. entre el resto de su equipo, añadir el .archivo xsd a su solución (como un 'Elemento de solución'), o si solo lo desea para un proyecto en particular, simplemente incrustarlo allí.

 0
Author: Matt Enright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-07 23:16:49

Lo noté un poco tarde, pero si miras los ejemplos que proporciona log4net, puedes ver que ponen todos los datos de configuración en una aplicación.config, con una diferencia, el registro de configsection:

<!-- Register a section handler for the log4net section -->
<configSections>
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>

Podría la definición como tipo "Sistema.Configuración.IgnoreSectionHandler " ¿es la razón por la que Visual Studio no muestra ningún mensaje de advertencia / error en las cosas de log4net?

 0
Author: Fysicus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-15 17:07:15

Seguí La respuesta de Kit https://stackoverflow.com/a/11780781/6139051 y no funcionó para los valores de AppenderType como "log4net.Appender.TraceAppender, log4net". La log4net.el ensamblado dll tiene el AssemblyTitle de "log4net", es decir, el nombre del ensamblado no tiene un punto dentro, por eso la expresión regular en la respuesta de Kit no funcionó. Tengo que añadir el signo de interrogación después del tercer grupo entre paréntesis en la expresión regular, y después de eso funcionó perfectamente.

El modificado regex se parece a lo siguiente:

<xs:pattern value="[A-Za-z_]\w*(\.[A-Za-z_]\w*)+(\s*,\s*[A-Za-z_]\w*(\.[A-Za-z_]\w*)?+)?"/>
 0
Author: Volodymyr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:55:19