我正在尝试建立一个公共日志库,它ILog根据当前堆栈确定实例,以及使用ILog的最佳实例.
我的配置设置如下:
<log4net>
<!-- appenders omitted -->
<root></root>
<logger name="MyAssembly.MyNamespace">
<level value="WARN" />
<!-- appender list -->
</logger>
</log4net>
Run Code Online (Sandbox Code Playgroud)
我有一个这样的课:
namespace MyAssembly.MyNamespace.SubNamespace {
public class MyClass { ... }
}
Run Code Online (Sandbox Code Playgroud)
当我尝试获取ILog我传入type(var log = LogManager.GetLogger(typeof(MyClass)).Namespace);)的实例时,我希望它检测到没有配置任何记录器,因此它将在命名空间树(to MyAssembly.MyNamespace)中上升一级,然后查看是否在那一点配置.
问题是ILog返回的for MyAssembly.MyNamespace.SubNamespace配置为WARN事件(及以上),基本上是我为它的父配置.ILog当所需名称包含已定义的名称时,Log4net似乎正在返回,而不是等于名称时.
当名称与配置中定义的名称相同时,如何让Log4net仅返回有效的记录器?
所以我试图在我的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)
我仍然会得到同样的错误.
有人可以给我一些关于如何追踪这个错误的指示吗?
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) http://logging.apache.org/log4net/release/config-examples.html
给出这里的日志表:
CREATE TABLE [dbo].[Log] (
[Id] [int] IDENTITY (1, 1) NOT NULL,
[Date] [datetime] NOT NULL,
[Thread] [varchar] (255) NOT NULL,
[Level] [varchar] (50) NOT NULL,
[Logger] [varchar] (255) NOT NULL,
[Message] [varchar] (4000) NOT NULL,
[Exception] [varchar] (2000) NULL,
[Product] [varchar] 100 not null
)
Run Code Online (Sandbox Code Playgroud)
和appender配置在这里:
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="100" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]" />
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception], [Product]) VALUES (@log_date, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用log4net.当我启动应用程序时,它会创建日志文件,但无论我调用Log.Info("Application Started");它多少次都是空的.我研究了google返回的前两页,我的代码似乎与所有示例相匹配.
码:
[assembly: XmlConfigurator(Watch = true)]
namespace Generator
{
public class Run
{
private static readonly log4net.ILog Log =
log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public List<BILL_RUN> PerformBillRun()
{
XmlConfigurator.Configure();
Log.Info("Application Started");
var enabled = Log.IsInfoEnabled; //This is true
}
}
}
Run Code Online (Sandbox Code Playgroud)
的app.config
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="log-files.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<level value="All" />
<appender-ref ref="FileAppender" />
</root> …Run Code Online (Sandbox Code Playgroud) 我正在努力让Log4Net使用Yahoo或Gmail等网络电子邮件.如果你有这个工作,我会感谢一些帮助,并提前感谢.
我有一个默认的根记录器,带有RollingFileAppender和一个SmtpAppender.文件追加器工作正常.SmtpAppender什么都没给我.
我从诊断按钮单击调用记录器...
protected void btnReloadContractConfig_Click(object sender, EventArgs e)
{
// DIAGNOSTIC - Test email logger
log4net.ILog logger = log4net.LogManager.GetLogger("root");
logger.Error("btnReloadContractConfig_Click() - This is a TEST of delivery of error messages via email, triggered from the Admin.aspx.cs code file.");
}
Run Code Online (Sandbox Code Playgroud)
...而RollingFileAppender正在收到消息......
LOC = 20120921-12:03:16.319,UTC = 20120921-11:03:16.319,DELTA = 10078,THR = 6,ERROR,LOG = root,[(null)] - btnReloadContractConfig_Click() - 这是交付测试通过电子邮件发送的错误消息,从Admin.aspx.cs代码文件触发.
Log4Net的web.config条目在这里::
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
<appSettings>
<log4net
xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="SmtpAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<file …Run Code Online (Sandbox Code Playgroud) 正如标题中所述,我遇到了一些问题,发现一个appender声明它支持TLS加密标准.
我一直在尝试使用SmtpAppender,但无法让它工作,并怀疑它与需要TLS加密的smtp服务器有关,而且SmtpAppender可能不支持这一点.
使用的配置:
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="my email" />
<from value="The senders email" />
<Username value="JohnDoe"></Username>
<password value="NoWay" ></password>
<authentication value="Basic"></authentication>
<subject value="Test message" />
<smtpHost value="pod51011.outlook.com" />
<port value="587" />
<bufferSize value="512" />
<lossy value="true" />
<EnableSsl value="true"/>
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="INFO"/>
</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) 在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值使用当前用户的电子邮件地址?
谢谢您的帮助.
当我想要检索与一个最高值的对象DateTime从属性IEnumerable,我可以做到以下几点:
var maxDate = myEnumerable.Max(x => x.TheDateTimeProperty);
var wantedObject = myEnumerable.FirstOrDefault(x => x.TheDateTimeProperty == maxDate);
Run Code Online (Sandbox Code Playgroud)
这可能没有获得第maxDate一个吗?例如这样:
var wantedObject = myEnumerable.GetByMaxDate(x => x.TheDateTimeProperty);
Run Code Online (Sandbox Code Playgroud)
我知道我可以写一个扩展方法GetByMaxDate,但我想知道linq是否已经提供了一个方法.
只是为了澄清:没有寻找其他可能来写这个.如果存在一种方法,我只是感兴趣.(代码少,代码管理的最佳性能)
我想添加新的日志到文件.这是我的appender:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="mylogfile.txt"/>
<appendToFile value="true"/>
<rollingStyle value="Size"/>
<maxSizeRollBackups value="5"/>
<maximumFileSize value="10MB"/>
<staticLogFileName value="true"/>
<filter type="log4net.Filter.StringMatchFilter">
<stringToMatch value="test"/>
</filter>
<filter type="log4net.Filter.StringMatchFilter">
<stringToMatch value="error"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline%exception"/>
</layout>
</appender>
<root>
<level value="All"/>
<appender-ref ref="RollingFileAppender"/>
</root>
Run Code Online (Sandbox Code Playgroud)
在我的班上,我补充道
[assembly: XmlConfigurator(Watch = true)]
Run Code Online (Sandbox Code Playgroud)
我添加访问该文件的所有人但是:log4net不写入文件.为什么?