标签: log4net-configuration

Log4Net 日志显示在控制台窗口中

我遇到的问题与大多数人使用 Log4net 时遇到的问题相反。我有一个基本的滚动日志附加程序,我在后面的代码中使用 INFO、WARN 和 ERROR 级别。我已在 app.config 中关闭调试。除了滚动日志附加程序之外,它仍然将日志数据推送到控制台窗口。

我该如何阻止这种行为?这使得查看控制台窗口成为一场噩梦。

我的配置:

<log4net debug="false">
  <appender name="RollingFileAppender"
            type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString"
          value="milliondollars.log"/>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <rollingStyle value="Composite"/>
    <filter type="log4net.Filter.LevelRangeFilter">
      <acceptOnMatch value="true" />
      <levelMin value="INFO" />
      <levelMax value="FATAL" />
    </filter>
    <datePattern value="yyyyMMdd"/>
    <maxSizeRollBackups value="100"/>
    <maximumFileSize value="15MB"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %-5level %logger: %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="RollingFileAppender" />
  </root>
</log4net>
Run Code Online (Sandbox Code Playgroud)

c# log4net log4net-configuration

5
推荐指数
1
解决办法
6695
查看次数

试图让 log4net 与 PowerShell 一起工作(混合使用 log4net 配置文件)

我一直在努力让 log4net 与 PowerShell 一起工作。我有以下 PowerShell 代码,它使用配置文件拉入 log4net,然后尝试创建一个简单的日志文件条目,但出现错误。

Clear-History
Clear-Host
#
Write-Host "BEGIN: Importing module psm_logger.psm1"
Import-Module "C:\Users\Administrator\Desktop\ps\IIS\psm_logger.psm1" -Force
Write-Host "BEGIN: log4net configuration definition"
$log = New-Logger -Configuration "C:\Users\Administrator\Desktop\ps\IIS\logging\log4net.config" -Dll "C:\Users\Administrator\Desktop\ps\IIS\logging\log4net.dll"
Write-Host "END: log4net configuration definition"
Write-Host "BEGIN: log4net configuration DEBUG definition"
#$log.DebugFormat("Logger configuration file is : '{0}'", (Resolve-Path "C:\Users\Administrator\Desktop\ps\IIS\logging\log4net.config"))
Write-Host "END: log4net DEBUG configuration definition"
#======================
$ThisHostname = $env:COMPUTERNAME
#======================
Write-Host "BEGIN: Module/Snapin import/addition"
Write-Host ""
$log.Info("BEGIN: Module/Snapin import/addition")
#======================
Run Code Online (Sandbox Code Playgroud)

上面引用的 psm_logger.psm1 文件包含:

function New-Logger
{
#Write-Host "BEGIN: New-Logger" …
Run Code Online (Sandbox Code Playgroud)

powershell log4net log4net-configuration log4net-appender

5
推荐指数
1
解决办法
8174
查看次数

使用共享程序集时如何配置 log4net?

使用共享程序集时如何配置 log4net?

我有多个依赖于公共组件的组件。每个组件都位于其自己的组件中。所有组件都使用 log4net 进行日志记录。所有组件都加载到单个进程空间中,但组件的使用顺序各不相同。所有外向组件在首次使用时加载各自的 log4net 配置,以尝试将日志数据发送到它们。通用组件不加载任何配置。此外,还有一个不使用公共组件的遗留组件。它还在首次使用时暴露并加载其配置。我无法直接接触这个遗留组件的代码或配置。

我面临的问题是,由于组件在第一次使用时加载其配置,最后一个加载配置的人获胜。这会导致发生日志记录,但所有日志输出最终都会进入加载的最后一个配置。显然,查看日志文件并将其他组件的日志条目写入其中是很丑陋的。

我通过使用 RepositoryAttribute 和 AliasRepositoryAttribute 找到了部分解决方案。这让外部组件将它们的配置加载到它们的“记录器存储库”中,并有效地将它们彼此隔离。遗留组件现在可以愉快地写入自己的日志,而我的组件没有噪音,我的组件也可以愉快地写入自己的日志,而不会在其他日志中产生噪音。

我说部分解决方案是因为仍然存在公共组件的日志记录情况。使用 AliasRepositoryAttribute 时,加载并为公共组件设置别名的第一个组件会获取所有日志输出,即使它是另一个正在调用公共组件的组件。这很糟糕,因为我会在后面的组件中丢失重要的日志信息,而且我会在第一个日志中包含不相关的日志信息。

下面的代码演示了这个问题:

通用:(代表通用组件)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
using log4net.Config;
[assembly: Repository("CommonLib")]

namespace CommonLib
{
    public class CommonClass
    {
        static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        public void DoCommon(string from)
        {
            Log.Debug("DoCommon:" + from);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

库 A:(代表其中一个外向组件)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using CommonLib;
using log4net;
using log4net.Config;
[assembly: Repository("ALib")]
[assembly: AliasRepository("CommonLib")]

namespace ALib …
Run Code Online (Sandbox Code Playgroud)

log4net log4net-configuration

5
推荐指数
0
解决办法
1251
查看次数

Log4net preserveLogFileNameExtension not working

this is my log4net configuration, the rollover log file is created wrong extension. The first file created with name of log_debug.txt and the rollover file created with log_debug.txt.1. but ideally it should be log_debug.1.txt.

I used preserveLogFileNameExtension value to be true, but it seems not working. Can you please check and let me know if anything wrong?

<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="DEBUG" />
      <levelMax value="DEBUG" />
    </filter>
    <file value=".\logs\log_debug.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="20" …
Run Code Online (Sandbox Code Playgroud)

log4net log4net-configuration log4net-appender

5
推荐指数
1
解决办法
4770
查看次数

WPF 应用程序中的 Log4Net 设置

我不敢相信我不得不问这个,但这里是......

我正在尝试在新的 WPF 应用程序中设置 log4net,但出于某种原因,它没有创建日志文件并记录任何内容,所以这是我到目前为止所做的步骤......

从 nuget 添加最新版本 (v2.0.8.0) 参考后。

在 AssemblyInfo.cs 中:

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

在 app.config 中:

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a" />
  </configSections>
  <log4net configSource="Log4Net.config" />
Run Code Online (Sandbox Code Playgroud)

在 Log4Net.config 中:

<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <appender name="rollingLogFile" type="log4net.Appender.RollingFileAppender">
    <file value="D:\Logs\WorkflowApp.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="100KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-6level %logger - %message %exception%newline" />
    </layout>
  </appender>
  <root>
    <level value="DEBUG" /> …
Run Code Online (Sandbox Code Playgroud)

c# wpf log4net log4net-configuration

5
推荐指数
1
解决办法
5505
查看次数

无法使用值[MinimalLock]在对象[log4net.Appender.RollingFileAppender]上设置属性[lockingModel]

我在我的C#应用​​程序中收到此错误.我使用log4net作为日志记录工具.

这是我的app.config文件:

<configuration>

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

  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="myLogger" />
    </root>
    <appender name="myLogger" type="log4net.Appender.RollingFileAppender,log4net">
      <param name="File" value="C:\MyApp\Logs\appLog.txt" />
      <param name="AppendToFile" value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="2" />
      <maximumFileSize value="100KB" />
      <staticLogFileName value="true" />
      <datePattern value="yyyyMMdd" />
      <lockingModel value="log4net.Appender.FileAppender+MinimalLock" />
      <immediateFlush value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
  </log4net>

</configuration>
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

c# logging log4net log4net-configuration

4
推荐指数
1
解决办法
5043
查看次数

log4net在代码中配置SqLite

今天早些时候我问了一个关于从代码配置log4net的问题,并且很快得到了答案,这使我可以将其配置为输出到文本文件.从那以后我的需求发生了变化,我需要使用SqLite作为追加器.所以我创建了以下类来允许这个:

public static class SqLiteAppender
{
    public static IAppender GetSqliteAppender(string dbFilename)
    {
        var dbFile = new FileInfo(dbFilename);

    if (!dbFile.Exists)
    {
        CreateLogDb(dbFile);
    }

    var appender = new AdoNetAppender
                       {
                           ConnectionType = "System.Data.SQLite.SQLiteConnection, System.Data.SQLite",
                           ConnectionString = String.Format("Data Source={0};Version=3;", dbFilename),
                           CommandText = "INSERT INTO Log (Date, Level, Logger, Message) VALUES (@Date, @Level, @Logger, @Message)"
                       };

    appender.AddParameter(new AdoNetAppenderParameter
                              {
                                  ParameterName = "@Date",
                                  DbType = DbType.DateTime,
                                  Layout = new log4net.Layout.RawTimeStampLayout()

                              });

    appender.AddParameter(new AdoNetAppenderParameter
                              {
                                  ParameterName = "@Level",
                                  DbType = DbType.String,
                                  Layout = new log4net.Layout.RawPropertyLayout { …
Run Code Online (Sandbox Code Playgroud)

c# log4net log4net-configuration

4
推荐指数
1
解决办法
2878
查看次数

更改日志级别而不重新启动应用程序

可以在不重新启动ASP.NET应用程序的情况下更改log4net日志记录级别.配置log4net配置的一些可能方法是:

  • ASP.NET Web配置文件.
  • 在AssemblyInfo.cs文件中添加单独的配置文件并引用配置文件: [assembly:log4net.Config.XmlConfigurator(ConfigFile="Log4Net.config",Watch=true)]

更改web.config文件中的配置将重新启动应用程序.如果我不想重新启动应用程序,是否建议使用单独的配置文件,或者是否有任何不同的方法?

asp.net log4net log4net-configuration

4
推荐指数
1
解决办法
1435
查看次数

log4net%属性不起作用

我有一个小测试项目,代码如下:

class Program
{
    static void Main(string[] args)
    {
        log4net.GlobalContext.Properties["logFileName"] = "log.txt";
        log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.xml"));

        log4net.ILog logger = log4net.LogManager.GetLogger("Tests");

        logger.Debug("Test message");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的log4net.xml配置文件包含以下内容:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="%property{logFileName}" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="100KB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%utcdate{ISO8601} [%level][%logger] %message%newline" />
        </layout>
    </appender>
    <root>
        <level value="ALL" />
        <appender-ref ref="RollingFileAppender" />
    </root>
</log4net>
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么log4net创建名为%property {logFileName}的文件并且不用log.txt替换它?

log4net库取自NuGet(Id:log4net Version:2.0.3).

.net c# logging log4net log4net-configuration

4
推荐指数
1
解决办法
4316
查看次数

无法创建类型'Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter,Common.Logging.Log4Net'

我在解决方案中有其他类库的WCF项目.我使用nuget包管理器为需要记录的项目添加了Common.Logging.

我收到此错误:

无法创建类型'Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter,Common.Logging.Log4Net'

当我执行时:

Common.Logging.ILog logger = Common.Logging.LogManager.GetLogger<Service1>();
logger.Error("Test");
Run Code Online (Sandbox Code Playgroud)

我的Web.Config就在这里

编辑:Bin文件夹有Common.Logging.Log4net1213.dll以及log4net.dll Bin文件夹内容的快照与Common.Logging相关

c# wcf log4net log4net-configuration

4
推荐指数
1
解决办法
6943
查看次数