我刚刚在log4net配置中遇到了两个部分:
<logger name="File">
<level value="All" />
</logger>
<root>
<level value="INFO" />
</root>
Run Code Online (Sandbox Code Playgroud)
我可以知道在记录器和根标签上指定级别有什么区别吗?他们之间有什么区别?
我有以下log4net配置:
<log4net>
<appender name="A1" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="C:\path1.log" />
</appender>
<appender name="A2" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="C:\path2.log" />
</appender>
<logger name="A1Logger">
<level value="ALL" />
<appender-ref ref="A1" />
</logger>
<logger name="A2Logger">
<level value="ALL" />
<appender-ref ref="A2" />
</logger>
</log4net>
Run Code Online (Sandbox Code Playgroud)
然后在代码中我执行以下操作:
var logger1 = LogManager.GetLogger("A1Logger");
var logger2 = LogManager.GetLogger("A2Logger");
Run Code Online (Sandbox Code Playgroud)
但两者都记录到同一个文件C:\path1.log.
我究竟做错了什么?
我试图纯粹通过代码配置Log4Net,但是当我使用最小配置时,我被NHibernate和流畅的界面记录消息所淹没.
所以,我想做的很简单.告诉Log4Net只显示我的单个类的日志消息.我玩弄了一下,但无法搞清楚......
任何人都可以提供帮助,我认为以下代码说明了我的想法:
var filter = new log4net.Filter.LoggerMatchFilter();
filter.LoggerToMatch = typeof(DatabaseDirectory).ToString();
filter.AcceptOnMatch = false;
var x = new log4net.Appender.ConsoleAppender();
x.Layout = new log4net.Layout.SimpleLayout();
x.AddFilter(filter);
log4net.Config.BasicConfigurator.Configure(x);
Run Code Online (Sandbox Code Playgroud)
好的,谢谢你的帮助,但这里一定有问题.但我越来越近了.我尝试了XML配置,它有更多的文档.我使用以下XML配置设法实现了预期的结果.上面的"纯代码"版本中必定存在一些错误配置.
以下XML配置提供"正确"输出,这与上面代码中的配置不同.有谁看到了差异?
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="ConsoleAppender" />
</root>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="Examples.FirstProject.Entities.DatabaseDirectory"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%C.%M] %-5p %m%n" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
这是我的web.config信息:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<level value="ALL" />
</root>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:\temp\log-file.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
</log4net>
...
Run Code Online (Sandbox Code Playgroud)
这是初始化记录器的代码:
protected void SendMessage()
{
log4net.Config.XmlConfigurator.Configure();
ILog log = LogManager.GetLogger(typeof(Contact));
...
log.Info("here we go!");
log.Debug("debug afasf");
...
}
Run Code Online (Sandbox Code Playgroud)
无论我做什么,它都不起作用.我正确地引用了'log4net.dll',通过调试应用程序,我可以看到日志对象正在正常启动.这是一个asp.net 3.5框架Web项目.有什么想法/建议吗?
我原本认为这个错误可能是由于文件写入权限约束,但似乎并非如此(或者我认为).
我想要做的就是将当前日期和时间附加到我的日志文件中,例如:
"export_(Wed_Feb_21_2009_at_1_36_41PM)"
Run Code Online (Sandbox Code Playgroud)
这是我的app.config中的当前配置
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:\export.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message %stackTrace%newline" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
是否可以将日期附加到我的日志文件中,或者这是我需要在代码中执行的操作之一而不是配置?
我在我的log4net配置中为我的应用程序设置了一个logfileAppender和一个consoleAppender.我希望logfile appender只写上面的ERROR消息和控制台appender来编写DEBUG及以上版本.
我的配置是:
<log4net debug="false">
<appender name="LogFileAppender" type="log4net.Appender.FileAppender,log4net" >
<param name="File" value="log.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d %M - %m%n" />
</layout>
<threshold value="ERROR"/>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %m%n" />
</layout>
</appender>
<root>
<priority value="DEBUG" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
我发现ERROR和DEBUG都输出到我的logfile appender.如何将其限制为仅ERROR?
这是我的app.config中的appender配置.这只是打印出文字字符串而不是将其翻译成日期(即,字面上打印"[START:%date {MM/dd/yy HH:mm}]").
<appender name="RollingLogFileAppender"
type="log4net.Appender.RollingFileAppender">
<file value="C:\somelog" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="-yyyy-MM-dd'.txt'" />
<layout type="log4net.Layout.PatternLayout">
<header value="[START: %date{MM/dd/yy HH:mm} ] " />
<conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" />
<footer value="[END] " />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
如何在标题中打印日期/时间?
我配置我的log4net来监视对app.config文件所做的更改.
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序并更改配置文件中的内容时,这些更改仅在我重新启动应用程序时生效.为什么会这样?
还有办法告诉log4net监视app.config中的更改吗?喜欢:
<appender name="FileAppender" type="log4net.Appender.FileAppender" >
<watch value="true" />
</appender>
Run Code Online (Sandbox Code Playgroud)
-------------编辑-------------
我现在尝试使用单独的配置文件:log4net.config.
它看起来像这样:
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="c:\log.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %c (line %L) -- %m%n" />
</layout>
</appender>
<root>
<appender-ref ref="FileAppender" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
在我的assemblyInfo.cs中,我写了以下内容:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
Run Code Online (Sandbox Code Playgroud)
记录到该文件的类如下所示:
ILog myLogger = LogManager.GetLogger(typeof(Form1));
myLogger.Debug("test");
Run Code Online (Sandbox Code Playgroud)
这就像旧版本一样.日志文件条目已经生成,但是当我在运行时更改我的log4net.config时,这些更改不会应用...."Watch = true"应该启用该功能,对吧?
我们正在使用ASP.NET MVC3应用程序中的Log4Net,一切正常但我们希望在日志文件中看到当前用户名而不是应用程序池的标识,这是我们使用的appender配置:
<log4net>
<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
<threshold value="ALL" />
<immediateFlush>true</immediateFlush>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<encoding value="utf-8" />
<file value="C:\Logs\MyLogs.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<maxSizeRollBackups value="30" />
<maximumFileSize value="25MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%property{log4net:HostName}] - %username%newline%utcdate - %-5level - %message%newline" />
</layout>
</appender>
<root>
<priority value="ALL" />
<appender-ref ref="FileAppender" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
所以看起来像属性:%username正在检索以下值:
WindowsIdentity.GetCurrent().Name
Run Code Online (Sandbox Code Playgroud)
而不是我们需要的: HttpContext.Current.User
如何在web.config中轻松解决这个问题,而无需创建自定义属性或其他log4net派生类?如果可能的话,如果自定义属性是我们可以忍受的唯一方式,我猜:)谢谢!
我有这样的AdoNetAppender设置:
<log4net>
<appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
<connectionStringName value="DefaultConnection" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />
<useTransactions value="false" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout" value="%thread" />
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout" value="%level" />
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType …Run Code Online (Sandbox Code Playgroud)