编辑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) 我试图将日期添加到我的日志文件名中,并且我能够通过遵循我在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
下面是我的配置和跟踪输出,它只是没有配置记录器,当我使用它时,没有任何内容写入日志(可能是因为没有启用所有日志级别).可能是什么问题呢?
<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]
" />
<footer value="[Footer]
" />
<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设置并配置为插入到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进行日志记录(呃!).使用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) 我有一个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) 我编写了一个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?
任何关于如何改善这一点的建议将不胜感激.
我正在使用它RollingLogFileAppender并且它工作得很好并且它正在滚动到新文件中.但是它在文件的最后添加了.1,.2等.所以我结束了.log.1,.log.2等于是每个文件在技术上有了新的扩展,资源管理器不知道,所以我不能只在文件上双击打开.
如何让滚动文件appender在文件扩展名之前插入该索引?
我想要的是
奖金将永远是当前文件.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和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) 我刚刚在log4net配置中遇到了两个部分:
<logger name="File">
<level value="All" />
</logger>
<root>
<level value="INFO" />
</root>
Run Code Online (Sandbox Code Playgroud)
我可以知道在记录器和根标签上指定级别有什么区别吗?他们之间有什么区别?