Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自程序集属性的Log4net配置未加载配置文件_Log4net_Log4net Configuration - Fatal编程技术网

来自程序集属性的Log4net配置未加载配置文件

来自程序集属性的Log4net配置未加载配置文件,log4net,log4net-configuration,Log4net,Log4net Configuration,我的bin目录中有以下文件Log4net.config: 以及my AssemblyInfo.cs文件中的以下代码: 使用系统反射; 使用System.Runtime.CompilerServices; 使用System.Runtime.InteropServices; [汇编:汇编版本(“1.0.0.0”)] [汇编:汇编标题(“我的项目”)] [程序集:log4net.Config.XmlConfigurator(ConfigFile=“log4net.Config”,Watch=tru

我的bin目录中有以下文件Log4net.config:


以及my AssemblyInfo.cs文件中的以下代码:

使用系统反射;
使用System.Runtime.CompilerServices;
使用System.Runtime.InteropServices;
[汇编:汇编版本(“1.0.0.0”)]
[汇编:汇编标题(“我的项目”)]
[程序集:log4net.Config.XmlConfigurator(ConfigFile=“log4net.Config”,Watch=true)]
当我运行该程序时,我得到以下log4net调试输出:

log4net: log4net assembly [log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821]. Loaded from [D:\Data\Projects\Active\Clients\MyProject\src\MyProject.Importer\bin\Debug\log4net.dll]. (.NET Runtime [4.0.30319.1] on Microsoft Windows NT 6.1.7600.0)
log4net: DefaultRepositorySelector: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy]
log4net: DefaultRepositorySelector: Creating repository for assembly [MyCompany.Framework, Version=2.1.72.0, Culture=neutral, PublicKeyToken=null]
log4net: DefaultRepositorySelector: Assembly [MyCompany.Framework, Version=2.1.72.0, Culture=neutral, PublicKeyToken=null] Loaded From [D:\Data\Projects\Active\Clients\MyProject\src\MyProject.Importer\bin\Debug\MyCompany.Framework.dll]
log4net: DefaultRepositorySelector: Assembly [MyCompany.Framework, Version=2.1.72.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified.
log4net: DefaultRepositorySelector: Assembly [MyCompany.Framework, Version=2.1.72.0, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy]
log4net: DefaultRepositorySelector: Creating repository [log4net-default-repository] using type [log4net.Repository.Hierarchy.Hierarchy]
The thread 'vshost.RunParkingWindow' (0xd30) has exited with code 0 (0x0).
The thread '<No Name>' (0x15d0) has exited with code 0 (0x0).
log4net: Hierarchy: Shutdown called on Hierarchy [log4net-default-repository]

我做错了什么?我想从AssemblyInfo.cs加载。

我对这种增强log4net的方法也有问题。声明说您必须在应用程序启动的早期打电话

如果使用配置属性,则必须调用log4net以允许它读取属性。对LogManager.GetLogger的简单调用将导致读取和处理调用程序集上的属性因此,必须在应用程序启动期间尽早进行日志记录调用,当然要在加载和调用任何外部程序集之前进行。

尝试将记录器放置在启动应用程序的同一类中(program.cs、app.xaml等)。比如说

private static readonly ILog Log = LogManager.GetLogger(typeof(Program));
对于kicks,对日志进行任何调用(即使是从append过程中筛选或评估的日志,也应该强制log4net评估您的存储库/继承人权限)


我正在使用Web.Config节来配置记录器并手动记录事件,从global.asax引导记录器

static ILog logger = LogManager.GetLogger(<LoggerName>);

protected void Application_Start()
{
   log4net.Config.XmlConfigurator.Configure(); 
}
static ILog logger=LogManager.GetLogger();
受保护的无效应用程序\u Start()
{
log4net.Config.XmlConfigurator.Configure();
}

尝试从global.asax引导它

我确实保留了
log4net.Config.XmlConfigurator.Configure(新文件信息(Server.MapPath(“~/Web.Config”));
static ILog logger = LogManager.GetLogger(<LoggerName>);

protected void Application_Start()
{
   log4net.Config.XmlConfigurator.Configure(); 
}

在应用程序\u Start()内部的Global.asax.cs中。。。所以我不需要到处带着命令

最后我找到了一个简单的解决方案,你可以在那里得到帮助

var log4NetPath = Server.MapPath("~/log4net.config");

FileInfo fileInfo = new FileInfo(log4NetPath);

XmlConfigurator.ConfigureAndWatch(fileInfo);
  • 启动函数中的Global.asax

     protected void Application_Start()
     {
       log4net.Config.XmlConfigurator.Configure();
     }
    
  • 在类级别使用日志记录的任何类中

  • private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    
    添加名称空间

    using log4net;
    
    在类级别添加此代码行

    private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    
  • 在任何操作调用中使用log函数

    log.Error("test error q111..");
    
  • 配置

    <configuration>
    <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net " />
    </configSection>
    <log4net debug="true">
    
    <!--AdoNet appender is use for write log file into sql server-->
    <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="Data Source=DESKTOP-NLH31FH; Initial Catalog=SmallBizDb;Integrated Security=true" providerName="System.Data.SqlClient" />
      <commandText value="INSERT INTO [dbo].[Logs] ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@logdate,@thread, @loglevel, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@logdate" />
        <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="@loglevel" />
        <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>
    <!--Add appender which you want to use, You can add more then one appender . Like if you want save log both plain text or sql server ,Add both appender.-->
    
    <root>
      <level value="Debug" />
      <!--<appender-ref ref="RollingLogFileAppender" />-->
      <!--Enable this line if you want write log file into plain text file-->
      <appender-ref ref="AdoNetAppender" />
      <!--Enable this line if you want write log file into sql server-->
    
    </root>
    
    </log4net>
    
    <appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
    </configuration>
    
    
    

  • 它可以帮助所有人,而且使用方便。谢谢

    我通过将添加到有问题的程序集的AssemblyInfo.cs文件来修复此问题

    [assembly: AssemblyTrademark("")]
    [assembly: AssemblyCulture("")]
    [assembly: RepositoryAttribute("Your.Namespace.Here")]
    

    我在windows服务中使用log4Net。我尝试了其他答案中提到的所有可能选项


    对我来说,该服务的另一个实例还活着,我不得不从任务管理器中删除它。在此之后,问题得到解决。

    一如既往,检查web服务应用程序的内部log4net调试输出
    ,这应该在哪里?@oliverdejohnson检查如何启用log4net内部调试?它展示了如何设置调试和跟踪侦听器。还有一个鲜为人知的问题,出于某些我无法理解的原因,他们决定log4net的XmlConfiguratorAttribute应该只在使用调试构建时起作用。如果您计划执行发布版本(在某些时候您肯定会这样做),则在应用程序启动期间必须使用ConfigureAndWatch方法。@TomLint刚刚使用发布版本测试了属性的使用,并且正在加载配置(2.0.6),但由于某些原因,仅在本地加载。在我将代码部署到Azure WebJob之后,它在发布版上构建时不起作用。您是否有此行为的文档来源?您需要在此处添加一些文字来解释此代码的功能。它已经被标记,并显示在低质量帖子审阅队列中,因此它有被删除的风险。我在上面尝试过,现在log4net没有给出创建程序集存储库的错误,但它仍然没有写入日志文件。创建存储库后,它只需关闭程序集。有什么想法吗??