bin*_*all 16 c# log4net winforms log4net-configuration
我已成功在我的应用程序中配置了log4net,但有一件事对我来说有点烦人.
即使没有错误发生,我的应用程序启动后也会创建(空)日志文件.我想在出现一些错误后才创建日志文件.
Loa*_*ian 14
我实际上在这个帖子中找到了一种方法:
http://www.l4ndash.com/Log4NetMailArchive/tabid/70/forumid/1/postid/18271/view/topic/Default.aspx
我测试了第一种方法,它的工作原理.为了防止链接不再好,我将在这里重现代码.基本上,作者声明有两种方法可以做到这一点.
第一种方式:
如果该记录器的适当阈值有效,则创建仅获取锁定(并创建文件)的新锁定模型.
public class MyLock : log4net.Appender.FileAppender.MinimalLock
{
public override Stream AcquireLock()
{
if (CurrentAppender.Threshold == log4net.Core.Level.Off)
return null;
return base.AcquireLock();
}
}
Run Code Online (Sandbox Code Playgroud)
现在在配置文件中,将阈值设置为以:
<threshold value="OFF" />
Run Code Online (Sandbox Code Playgroud)
并确保在建模时设置这个新的LockingModel:
<lockingModel type="Namespace.MyLock" />
Run Code Online (Sandbox Code Playgroud)
我正在使用滚动文件appender.
第二种方法列在链接中.我没有尝试过这种技术,但它似乎在技术上是合理的.
我知道这是一个老问题,但我认为这对其他人有用.
我们遇到了类似的情况,即如果没有发生错误,应用程序不应该留下空的日志文件.
我们通过创建以下自定义LockingModel类来解决它:
public class MinimalLockDeleteEmpty : FileAppender.MinimalLock
{
public override void ReleaseLock()
{
base.ReleaseLock();
var logFile = new FileInfo(CurrentAppender.File);
if (logFile.Exists && logFile.Length <= 0)
{
logFile.Delete();
}
}
}
Run Code Online (Sandbox Code Playgroud)
它派生自FileAppender.MinimalLock类,它将在写入每条日志消息后释放对日志文件的锁定.
我们添加了额外的功能,如果日志文件在锁定释放后仍为空,则会删除日志文件.如果应用程序运行并退出而没有任何错误,它可以防止应用程序留下空的错误日志文件.
优点
缺点
小智 6
以下对我有用。配置记录器时,第一次调用OpenFile()。后续调用是在生成实际日志消息时。
class CustomFileAppender : RollingFileAppender
{
private bool isFirstTime = true;
protected override void OpenFile(string fileName, bool append)
{
if (isFirstTime)
{
isFirstTime = false;
return;
}
base.OpenFile(fileName, append);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在配置文件中,更改附加程序
<log4net>
<appender name="RollingFile" type="<your namespace>.CustomFileAppender">
...
</log4net>
Run Code Online (Sandbox Code Playgroud)
来自log4Net源的顺序如下:
| 归档时间: |
|
| 查看次数: |
10328 次 |
| 最近记录: |