【问题标题】:Can't load Log4Net configuration无法加载 Log4Net 配置
【发布时间】:2013-08-10 08:32:32
【问题描述】:

我在 vb.net 中有一个全新的控制台应用程序。我想使用 log4net,所以我做了以下步骤,它可以工作。伟大的。雅虎。

但我必须将 Log4Net.config 与 Log4Net.dll 和 Log4Net.xml 一起放在 bin/debug 中。我尝试了很多事情,但没有快乐。或者我没有找到正确的组合。如何将 Log4Net.config 移动到应用根目录?

从 NuGet 安装 Log4Net。

我加了

<Assembly: XmlConfigurator(ConfigFile:="Log4Net.config", Watch:=True)> 

在 AssemblyInfo.vb 中。

我是这样称呼它的:

Public Class Class1

'Save log4net log into SQL Server
Private Shared ReadOnly DBlog As ILog = LogManager.GetLogger("TestLog4Net")

Public Shared Sub Main(ByVal args() As String)

    DBlog.Error("Log4Net testing v1")

End Sub

End Class

我的 Log4Net.Config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>

    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

      <connectionString value="xxxxx" />
      <commandText value="xxxxx" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
    </appender>

    <logger name="TestLog4Net">
      <level value="ALL" />
      <appender-ref ref="AdoNetAppender" />
    </logger>

  </log4net>
</configuration>

我试过了

在我说DBlog.Error("xx")之前设置以下行

log4net.Config.XmlConfigurator.Configure()

在 app.config 中设置。

<log4net configSource="Log4Net.config" />

将整个 Log4Net.config 移动到 app.config。那没用。

按照某人在一篇帖子中的建议进行设置。那也没用。

<appSettings>
    <add key="log4net.Config" value="log4net.config"/>
    <add key="log4net.Config.Watch" value="True"/>
</appSettings>

声明这个而不是我正在使用的GetLogger("name")。也没有欢乐。

Private Shared ReadOnly log As ILog = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

【问题讨论】:

  • 不引用您的 app.config 中的 log4Net 配置,您只需将 log4net xml 作为配置部分包含在 app.config 中,怎么样?这对您的目的有用吗?
  • @Danzomida 嗨,我尝试将 Log4Net.config 中的所有内容复制到 之间的 App.config。它没有用。如果我想这样做,我还需要改变什么?我是否将其更改为其他内容? ' '
  • 如果你还没有做的话,你需要把它指定为一个配置节:
    configSections> (就像在 ChristianDev 的回答中一样)

标签: asp.net vb.net log4net error-logging


【解决方案1】:

如果您只想将 Log4net.config 文件移动到 bin/Debug,请尝试在解决方案资源管理器中右键单击该文件 -> 属性 -> 将复制到输出目录的值更改为 始终复制。我不确定这是否是你想要的。所以,我可能错了。随时纠正我。 ;)

编辑: 另一种方法是编写预构建命令。 在解决方案资源管理器中右键单击项目 -> 属性 -> 转到构建事件选项卡

假设Log4net.config文件存在于项目目录(你的vb文件所在的目录)下,可以在Pre-build event命令行下给出如下命令,

xcopy "$(ProjectDir)Log4net.config" "$(TargetDir)"

【讨论】:

  • 感谢您的回复 Nirmal。但是当我在解决方案资源管理器中右键单击 Log4Net.config 文件时,我没有看到“复制到输出目录”属性。这是一个使用 VS2012 的控制台应用程序。我不确定我做错了什么。
  • 谢谢.. 现在我明白我做错了什么。默认情况下,解决方案中不包含 Bin/Debug。我必须将它作为解决方案的一部分包含在内,然后我才能做到 Copy Always 。但是,将 Bin 文件夹作为源包含是一件好事吗?它可能很大,因为其中有很多 ddls。
  • +1 - 复制到输出目录是正确答案。 @LaurenceNyein 你真的不想包含 bin/Debug 文件夹..
【解决方案2】:

在我的 C# 控制台应用程序中,我有以下内容:

AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

App.Config

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


 <log4net>
    <!--
  This writes the log information to the console window.  It only logs events
  that are at least at the INFO level (which would mean that DEBUG events are not
  captured.
  -->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{ABSOLUTE} [%thread] %level %logger - %message%newlineExtra Info: %property{testProperty}%newline%exception"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="INFO"/>
        <levelMax value="FATAL"/>
      </filter>
    </appender>
    <!--
  This stores information in the mylogfile.txt file.  It only captures log events
  that contain the key word test or error.
  -->
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs/file-"/>
      <datePattern value="yyyy-MM-dd.lo\g"/>
      <appendToFile value="true"/>
      <rollingStyle value="Date"/>
      <maxSizeRollBackups value="5"/>
      <maximumFileSize value="10MB"/>
      <staticLogFileName value="false"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %level %logger - %message%newline%exception"/>
      </layout>
    </appender>
    <root>
      <level value="ALL"/>
      <appender-ref ref="RollingFileAppender"/>
      <appender-ref ref="ConsoleAppender"/>
    </root>
  </log4net>

在我的课上,我有..

private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

Log.InfoFormat("...");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2014-10-24
    • 2016-10-26
    相关资源
    最近更新 更多