经过很多问题后,我终于设法为我的窗口服务配置了log4net。
我对它很陌生,今天我开始配置它。我有以下疑问。
1)我需要将它用于多个程序集。假设我有一个程序集'A',作为参考添加到程序集'B'中,这是我的主程序集,其中我引用了log4net。我需要记录程序集'A'和'B'。
2)我的应用程序是多线程的并且使用大量线程。那么log4net是线程安全的吗?
3)我在app.config中使用下面的配置。我不太清楚它的用途是什么。但我不想使用不必要的参数。
<log4net>
<root>
<level value="DEBUG"/>
<appender-ref ref="LogFileAppender"/>
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="C:\logs\log.txt"/>
<param name="AppendToFile" value="true"/>
<rollingStyle value="Size"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="100KB"/>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n"/>
</layout>
</appender>
</log4net>
答案 0 :(得分:1)
在appender部分下使用<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
。我斜纹增加了日志记录性能。
log4net是线程安全的。
<maximumFileSize value="10MB" /> //For 100 Kb configuration there will be lot of files.
<datePattern value="_yyyyMMdd" />
//它会提示记录器每个日期创建一个新文件。
为Logger创建一个静态类,并从您要使用的每个程序集中调用静态函数。
记录的样本类:
public static class Logger
{
static Logger()
{
XmlConfigurator.Configure();
}
public static void Log()
{
string methodName = new System.Diagnostics.StackFrame(1, true).GetMethod().Name;
string moduleName = new System.Diagnostics.StackFrame(1, true).GetMethod().ReflectedType.FullName;
var appLog = LogManager.GetLogger(loggername);
appLog.Error(...);
}
}
答案 1 :(得分:0)
ILog
只需确保在应用程序的生命周期内拨打Configure()
一次。 答案 2 :(得分:0)
<root>
<level value="DEBUG"/>
<appender-ref ref="LogFileAppender"/>
</root>
它只会在调试模式下登录,因此请在config中输入以下内容:
<root>
<level value="ALL"/>
<appender-ref ref="LogFileAppender"/>
</root>