小编Phi*_*p M的帖子

log4net BufferingForwardingAppender性能问题

编辑2:我已经解决了问题(请参阅下面的答案)请注意,该问题可能会影响所有使用BufferingForwardingAppender修饰的appender以及从BufferingAppenderSkeleton继承的所有appender(分别为:AdoNetAppender,RemotingAppender,SmtpAppender和SmtpPickupDirAppender)*

我正在做一些非常基本的log4net工作台,我尝试用BufferingForwardingAppender修饰RollingFileAppender.

我通过BufferingForwardingAppender遇到了糟糕的性能,而不是直接通过RollingFileAppender,我真的没有理由.

这是我的配置:

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="c:\" />
  <appendToFile value="false" />
  <rollingStyle value="Composite" />
  <datePattern value="'.'MMdd-HH'.log'" />
  <maxSizeRollBackups value="168" />
  <staticLogFileName value="false" />
  <layout type="log4net.Layout.PatternLayout">      
    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
  </layout>
</appender>

<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender">
  <bufferSize value="512" />
  <appender-ref ref="RollingLogFileAppender" />
</appender>

<root>
  <level value="DEBUG" />
  <appender-ref ref="BufferingForwardingAppender" />    
</root>
Run Code Online (Sandbox Code Playgroud)

这是基准(非常简单的代码):

var stopWatch = new Stopwatch();
stopWatch.Start();            
for (int i = 0; i < 100000; i++)            
{
   Log.Debug("Hello");
}
stopWatch.Stop();
Console.WriteLine("Done in {0} ms", stopWatch.ElapsedMilliseconds); …
Run Code Online (Sandbox Code Playgroud)

c# performance log4net appender

22
推荐指数
1
解决办法
1万
查看次数

使用Log4Net时,为什么在文件名上附加两次日期?

我试图将日期添加到我的日志文件名中,并且我能够通过遵循我在stackoverflow中找到的一些建议来使其工作.一切正常,但由于某种原因,第一个文件总是有两次附加日期.

例如,而不是log.2009-02-23.log,我得到log.2009-02-23.log.2009-02-23.log.

我发现它很奇怪,而且这是一个非常简单的代码.这不像我在多线程环境中运行它.

我的log4net配置:

<log4net>
<appender name="MyLog" type="log4net.Appender.RollingFileAppender">
    <file value="../../Logs/Mylog"/>
    <staticLogFileName value="false" />
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <datePattern value=".yyyy-MM-dd.lo\g" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{DATE} [%t] %-5p %c - %m%n"/>
    </layout>
</appender>
<root>
    <level value="INFO"/>
    <appender-ref ref="MyLog"/>
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

编辑:我想添加有关我正在测试的环境的信息.
- asp.net
- .net framework 2.0
- windows server 2003 64位服务包2
- log4net 1.2.10

log4net rollingfileappender

21
推荐指数
2
解决办法
8260
查看次数

没有加载web.config中的log4net配置 - 为什么?

下面是我的配置和跟踪输出,它只是没有配置记录器,当我使用它时,没有任何内容写入日志(可能是因为没有启用所有日志级别).可能是什么问题呢?

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

<appSettings>
    <add key="log4net.Internal.Debug" value="true" />
</appSettings>

<log4net>
    <!-- Define some output appenders -->

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="logs\rolling-log.txt" />
        <appendToFile value="true" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="100" />
        <rollingStyle value="Size" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]&#xD;&#xA;" />
            <footer value="[Footer]&#xD;&#xA;" />
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
        </layout>
    </appender>

    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
        <file value="logs\bidz-log.txt" />
        <!-- Example using environment variables in params -->
        <!-- <file value="${TMP}\log-file.txt" /> --> …
Run Code Online (Sandbox Code Playgroud)

log4net

21
推荐指数
1
解决办法
2万
查看次数

Log4net没有插入数据库?

我有log4net设置并配置为插入到sql server 2005表中.我的表叫做Log.当我调用log4net方法时,它不会将任何数据输入到sql server中的日志数据库中.我的客户端c#代码没有收到任何错误.我是否需要将用户添加到sql的日志表中?现在我正在使用Windows身份验证.

<configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
 <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
   <bufferSize value="100" />
   <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
connectionString value="Data Source=V-FIN-SQL-D\SQL2005;Initial Catalog=DevMHAIC;Integrated Security=True;Connection Timeout=360" />
  <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES
       (@log_date, @thread, @log_level, @logger, @message, @exception)" />
 <parameter>
   <parameterName value="@log_date" />
        <dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
  </parameter>
   <parameter>
 <parameterName value="@thread" />
     <dbType value="String" />
   <size value="32" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%t" />
 </layout>
 </parameter>
   <parameter>
    <parameterName value="@log_level" />
    <dbType value="String" /> …
Run Code Online (Sandbox Code Playgroud)

log4net sql-server-2005

20
推荐指数
2
解决办法
1万
查看次数

为log4net配置自定义事件日志

我正在使用log4net进行日志记录(呃!).使用EventLogAppender,我可以配置我的应用程序名称,以便我的事件将显示在Application /"My Application Name"事件日志中.但是,我想将事件记录到"其他事件日志"/"我的应用程序名称".我该如何配置?

当前配置:

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
    <applicationName value="My application Name" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

对于EventLogInstaller,代码如下所示:

eventLogInstaller.Log = "Some other event log"; // Default "Application"
eventLogInstaller.Source = "My application name";
Run Code Online (Sandbox Code Playgroud)

.net c# log4net event-log

18
推荐指数
1
解决办法
2万
查看次数

如何将不同的日志级别记录到log4net中的不同日志appender

我有一个WinForm,它显示日志信息,但我希望它只显示INFO级别,但我希望日志文件中的日志也包含DEBUG级别.

以下是我的配置:

<?xml version="1.0" encoding="utf-8" ?>
<!-- This section contains the log4net configuration settings -->
<log4net>
  <!-- Define some output appenders -->

  <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="${ALLUSERSPROFILE}\\Application Data\\logs\\Gateway" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <param name="StaticLogFileName" value="false" />
    <datePattern value=".yyyyMMdd.lo\g" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date | [%thread] | %-5level | %logger | %message %newline" />
    </layout>
  </appender>

  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>

  <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
    <mapping>
      <level value="DEBUG" …
Run Code Online (Sandbox Code Playgroud)

log4net log4net-configuration

18
推荐指数
2
解决办法
2万
查看次数

Log4Net性能

我编写了一个C#应用程序,它在循环中不断运行,并且有几个线程写入log4net文件.

问题是应用程序运行的时间越长,完成循环所需的时间就越长.我已经运行了一个ANTS性能分析器,并注意到大部分CPU时间花在使用log4.net进行日志记录.

日志越详细,它使用的CPU越多,30分钟后它使用100%的CPU.如果我禁用日志记录,循环所需的时间将随着时间的推移保持不变.我查看了Windows性能监视器,物理磁盘大部分时间都是IDLE.

我试图将我的日志记录保持在最低限度,但即使记录的数量相对较少,我仍然遇到问题.

以下是我的Log4net.xml配置文件的示例:

<log4net>
  <root>
    <!-- Levels: OFF, DEBUG, INFO, WARN, ERROR, FATAL-->
    <level value="INFO" />
    <appender-ref ref="RollingLogFileAppender" />
  </root>

  <!--Logs to a file-->
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="c:\\logs\\log-file.txt" />
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
    <rollingStyle value="Composite" />
    <datePattern value="yyyyMMdd" />
    <maxSizeRollBackups value="20" />
    <maximumFileSize value="1MB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger %L %M Schdl:[%property{scheduleContext}] Job:[%property{jobContext}] - %message%newline" />
    </layout>
  </appender>
</log4net>
Run Code Online (Sandbox Code Playgroud)

我正在使用记录的每个对象使用相同的记录器.

  log4net.ILog logger;
  log4net.Config.BasicConfigurator.Configure();
  logger = log4net.LogManager.GetLogger(typeof(myProject));
Run Code Online (Sandbox Code Playgroud)

为什么它运行得越久就会使用越来越多的CPU?

任何关于如何改善这一点的建议将不胜感激.

c# logging log4net multithreading

16
推荐指数
1
解决办法
1万
查看次数

如何在日志文件名中附加滚动索引BEFORE文件扩展名

我正在使用它RollingLogFileAppender并且它工作得很好并且它正在滚动到新文件中.但是它在文件的最后添加了.1,.2等.所以我结束了.log.1,.log.2等于是每个文件在技术上有了新的扩展,资源管理器不知道,所以我不能只在文件上双击打开.

如何让滚动文件appender在文件扩展名之前插入该索引?

我想要的是

  • .1.log
  • .2.log

奖金将永远是当前文件.0.log,这样他们总是在资源管理器中正确排序.

编辑:添加了我当前的配置设置

<log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
      <file value="App_Data\\Logs\\" />
      <datePattern value="dd.MM.yyyy'.log'" />
      <staticLogFileName value="false" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="5MB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>


    <logger name="File">
      <level value="All" />
      <appender-ref ref="RollingLogFileAppender" />
    </logger>
  </log4net>
Run Code Online (Sandbox Code Playgroud)

log4net

16
推荐指数
1
解决办法
7070
查看次数

log4net - Aplder在IIS7.5中不起作用

我能够使用log4net和Cassini/IIS开发服务器写入日志文件,但是当我使用IIS7.5时,我无法写出文件.

最初,我得到了一个安全异常,所以我添加requirePermission="false"了异常消失但没有创建文件.

根据IISM,信任级别已满.

我不能在我自己的机器上工作,我想知道当我转移到ISP(discountASP)时会发生什么.

这是log4net设置:

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

<log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="log-file.txt" />
        <appendToFile value="true" />
        <encoding value="utf-8" />
        <layout type="log4net.Layout.SimpleLayout" />
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="FileAppender" />
    </root>
</log4net>
Run Code Online (Sandbox Code Playgroud)

C#

log4net.Config.XmlConfigurator.Configure();
ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Log.Info("This is a test");
Run Code Online (Sandbox Code Playgroud)

有线索吗?

ASP.NET 3.5,VS2008,Windows 7,IIS7.5,log4net 1.2.10

编辑:

我使用在Cassini中运行的测试Web应用程序并在IIS7.5中运行它,因此我的Web应用程序特有的东西阻止了log4net的运行.其中有很多内容,ELMAH,输出缓存,AJAX控件工具包,表单身份验证,ssl,url重写等...除了将每个都添加到测试应用程序之外,有没有更好的方法来找出导致的原因log4net工作?

更新:

我使用AdoNetAppender远离文件权限问题,但仍然得到相同的结果.AdoNetAppender适用于在Cassini和IIS上运行的测试应用程序,但它不适用于我的Web应用程序.获得以下异常:

System.Security.SecurityException:对"System.Configuration.ConfigurationPermission,System.Configuration ..."类型的权限的请求失败.

更新2: 我错误地认为测试webapp fileAppender在IIS7.5中工作.这就是:测试webapp fileAppender和AdoDotNetAppender都在Cassini/IIS开发中工作,但在IIS7.5中不工作.所以我认为这是IIS的问题,而不是我的webapp.

注意.我作为管理员运行VS2008,但我作为nonAdmin登录到Windows 7.此外,我正在运行Windows 7 Home Premium,而非Professional.

我向网络根目录授予了NETWORK SERVICE完全权限,但仍然没有创建文件.还给了每个人完全许可,没有文件.

由于adoDotNetAppender不起作用(但在开发IIS中也没有),我认为除了文件权限之外可能还有另外一个问题.

更新3:

我让它为IIS7上的FileAppender工作.如果我添加这个:

<identity impersonate="true"
    userName="zzz"
    password="yyy" …
Run Code Online (Sandbox Code Playgroud)

iis log4net asp.net-3.5 visual-studio-2008 windows-7

15
推荐指数
2
解决办法
2万
查看次数

log4Net中记录器和根级别之间的区别?

我刚刚在log4net配置中遇到了两个部分:

<logger name="File">
  <level value="All" />
</logger>
<root>
  <level value="INFO" />
</root>
Run Code Online (Sandbox Code Playgroud)

我可以知道在记录器和根标签上指定级别有什么区别吗?他们之间有什么区别?

c# asp.net log4net

15
推荐指数
1
解决办法
1万
查看次数