所以我试图在我的Web .NET 4.0应用程序中设置Log4Net.我已将正确的.dll添加到我的项目中,并将以下内容作为启动器添加到我的Web.Config文件中:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</configSections>
<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\\TestProj\\TestLog.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
但是,如果我将"log4net"部分附加到Web.Config,我将收到错误消息
无法在Web服务器上启动调试.有关常见配置问题请参阅帮助.....
确保服务器正常运行.验证web.config中没有语法错误........
注意 我可以删除本节的所有内部结构,只留下声明:
<log4net></log4net>
Run Code Online (Sandbox Code Playgroud)
我仍然会得到同样的错误.
有人可以给我一些关于如何追踪这个错误的指示吗?
我想创建一个仅针对特定级别记录的appender,仅针对特定记录器.从我所看到的,基于本教程,过滤器是ORed在一起.我如何和log4net一起过滤?这是我正在做的一个例子:
<appender name="MyAppender">
<!--log only INFO level-->
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<!--log only UserController logger-->
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="MyLogger" />
</filter>
<!-- do not log anything else -->
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
Run Code Online (Sandbox Code Playgroud) log4net正在报告:
logger log4net找不到appender:Logger:请正确初始化log4net系统.
我有一个独立的log4net配置文件:
<!--?xml version="1.0"?-->
<configuration>
<configsections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
</configsections>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:\temp\log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
..和这个应用程序启动代码
private static ILog logger;
protected void Application_Start(object sender, EventArgs e)
{
////This tells log4net where to go and look for its configuration file and also …Run Code Online (Sandbox Code Playgroud) 在Log4Net配置示例网页上,它显示了如何设置SmtpAppender的示例.
所以我将以下设置添加到我的app.config文件中,并在记录警告或更高时成功发送电子邮件(这很好).
<appender name="EmailAppender" type="log4net.Appender.SmtpAppender">
<to value="me@mycompany.com" />
<from value="me@mycompany.com" />
<subject value="test logging message" />
<smtpHost value="smtpserver.mycompany.com" />
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="WARN"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
但是From值是用我的电子邮件地址硬编码的.
我的应用程序是一个WinForms应用程序,它将部署到用户PC,因此知道哪个用户遇到警告/错误会非常方便.
是否可以设置Log4Net SmtpAppender以使From值使用当前用户的电子邮件地址?
谢谢您的帮助.
我有一个奇怪的问题.我在解决方案中有多个项目.其中一个是WebAPI,它记录得很好.另一个是MVC管理站点,这个不会登录.这是我尝试过的.
我的日志代码:
var log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
log.Info("Some log message");
Run Code Online (Sandbox Code Playgroud)
在assemblyInfo中,我尝试了以下各项......
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "logging.config", Watch = true)]
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "C:\\full_path\\logging.config", Watch = true)]
Run Code Online (Sandbox Code Playgroud)
在Global.asax application_start中我尝试了以下(删除assemblyInfo行)
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo("Logging.config"));
var log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
log.Info("Application starting");
Run Code Online (Sandbox Code Playgroud)
这也不会创建日志.我可以创建一个的方法是使用global.asax中的代码和logging.config的完整路径.
我很困惑,因为webapi只使用只有相对路径的assemblyInfo.我还使用AssemblyInfo解决方案(相对路径)制作了带有MVC项目的示例虚拟解决方案,并且它也在那里工作.
有任何想法吗?
更新 - 发现问题
我必须在Application_Start中设置配置文件观察器:
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(AppDomain.CurrentDomain.BaseDirectory + "logging.config"));
Run Code Online (Sandbox Code Playgroud)
事实证明,DotNetOpenAuth.Core.dll使用log4net,并且使用AssemblyInfo解决方案无法正常工作.我在这个博客中找到了详细信息:http://hanskindberg.wordpress.com/2013/04/07/log4net-configuration/
谢谢
我继承了一些代码,它在xml configuraiton的根目录下使用了priority元素.这就像http://iserialized.com/log4net-for-noobs/上的示例所示:
<root>
<priority value="ALL" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender"/>
</root>
Run Code Online (Sandbox Code Playgroud)
但是,http: //logging.apache.org/log4net/release/manual/configuration.html上的log4net配置示例始终使用level元素显示它:
<root>
<level value="DEBUG" />
<appender-ref ref="A1" />
</root>
Run Code Online (Sandbox Code Playgroud)
在这种类型的配置是
<priority>
Run Code Online (Sandbox Code Playgroud)
同样的
<level>
Run Code Online (Sandbox Code Playgroud)
?
有人能指出我在解释这个问题的文档中的某个地方吗?
我无法写日志任何信息,错误,使用log4net调试,我尝试了所有给网络服务的permsission,每个人到目录asp.net临时文件夹,日志文件夹,甚至c:\,
它只是创建一个空文件.但不要写日志
可能是什么问题
Thx Raj
由于这里的用户,我最近来到了log4net.无论如何,我想将每个Console.Write()和Debug.Write()自动记录到我配置的单个日志文件中.另外,我使用了许多类库,这些类也有对log4net一无所知的Console/Debug语句.这些也可以根据配置自动记录到日志文件中吗?这有可能吗?
我想要记录滚动日志文件:
Console.WriteLine("console statement");
Debug.WriteLine("debug statement");
Run Code Online (Sandbox Code Playgroud)
实例化记录器:
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private static void InitializeLogger()
{
XmlConfigurator.Configure();
}
Run Code Online (Sandbox Code Playgroud)
整个app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="SubToolsPortServerTest.log"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="1MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud) 有没有办法从日志中过滤出INFO,只显示DEBUG&ERROR,使用web.config中的配置?
<root>
<level value="DEBUG" />
<appender-ref ref="ColoredConsoleAppender" />
<appender-ref ref="RollingFileSystemAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
Run Code Online (Sandbox Code Playgroud) log4net log4net-configuration log4net-filter log4net-appender
我正在努力理解配置 log4net 以在 .Net Core 3.1 应用程序中使用的最简单方法。该应用程序使用的是 log4net 2.0.8。所以:
有没有办法使用 application.runtimeconfig.json 文件来配置来做到这一点?如果是这样,我会向应用程序添加什么代码来告诉它使用这些设置 - 例如:
log4net.Config.XmlConfigurator.Configure();
Run Code Online (Sandbox Code Playgroud)
如果这是不可能的,那么添加配置文件(比如 log4net.xml)并告诉应用程序使用它的最简单方法是什么?
我想暂时将所有日志记录定向到一个文件,比如 Temp.log。我看过很多 log4net 页面,但他们要么谈论使用在新的 .Net Core 3.1 项目中不存在的 Assembly.Info.cs,要么似乎以编程方式设置了我想避免的 log4net 配置。我原以为这很容易,所以如果我错过了一个明显的方法,我深表歉意。