Log4Net"无法找到架构信息"消息

xsl*_*xsl 57 schema logging log4net web-services web-config

我决定使用log4net作为新web服务项目的记录器.一切都运行正常,但我收到了很多消息,如下面的消息,对于我在我使用的每个log4net标签web.config:

找不到元素'log4net'的架构信息......

以下是我的相关部分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>
Run Code Online (Sandbox Code Playgroud)

解决了:

  1. 将每个log4net特定标记复制到单独的xml文件.确保.xml用作文件扩展名.
  2. 将以下行添加到AssemblyInfo.cs:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "xmlFile.xml", Watch = true)]
Run Code Online (Sandbox Code Playgroud)

nemo补充道:

只需向任何人发出警告,请遵循此主题中的答案建议.将x4中的log4net配置放在Web服务的根目录下可能存在安全风险,因为默认情况下任何人都可以访问它.如果您的配置包含敏感数据,请注意,您可能希望将其放在何处.


@wcm:我尝试使用单独的文件.我添加了以下行AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
Run Code Online (Sandbox Code Playgroud)

并将处理log4net的所有内容放在该文件中,但我仍然收到相同的消息.

小智 69

您可以在模式中绑定log4net元素.有几个漂浮在周围,大多数没有完全提供各种可用选项.我创建了以下xsd以提供尽可能多的验证:http: //csharptest.net/downloads/schema/log4net.xsd

您可以通过修改log4net元素轻松地将其绑定到xml中:

<log4net 
     xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Run Code Online (Sandbox Code Playgroud)

  • 很奇怪log4net不包含XSD. (10认同)
  • 这个XSD抱怨使用自定义appender.它只允许默认集(定义为枚举)中的appender,而不是简单地将其作为字符串字段 (4认同)
  • @BenLaan Roger 提供的许可证允许您从他的 XSD 创建衍生作品。只需复制他的 XSD 并将自定义附加程序添加到 &lt;xs:simpleType name="log4netAppenderTypes"&gt; 部分即可。然后,您可以将此 XSD 文件放在您喜欢的任何位置,并从您的配置文件中引用它(而不是他的)。例如,xsi:noNamespaceSchemaLocation="myschemas\mylog4net.xsd" (2认同)

ste*_*mtl 17

我有不同的看法,需要以下语法:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml", Watch = true)]
Run Code Online (Sandbox Code Playgroud)

这与xsl的上一篇文章不同,但对我有所帮助.查看这篇博文,它帮助了我.


Jam*_*hon 9

只需向任何人发出警告,请遵循此主题中的答案建议.将x4中的log4net配置放在Web服务的根目录下可能存在安全风险,因为默认情况下任何人都可以访问它.如果您的配置包含敏感数据,请注意,您可能希望将其放在何处.

  • 更好的解决方案是使用`.config`扩展名而不是`.xml`.IIS将默认阻止对.configs的请求 (12认同)

Whe*_*lie 5

我相信您正在看到该消息,因为Visual Studio不知道如何验证配置文件的log4net部分.您应该能够通过将log4net XSD复制到C:\ Program Files\Microsoft Visual Studio 8\XML\Schemas(或安装Visual Studio的任何位置)来解决此问题.作为额外的奖励,您现在应该获得对log4net的intellisense支持

  • 对于VS 2010,将上面提到的log4net XSD放入C:\ Program Files\Microsoft Visual Studio 10.0\XML\Schemas.关闭并重新打开VS. 打开.config文件,转到菜单项XML - > Schemas,单击log4net.xsd并"使用此架构" (4认同)