在.net 4.0中 framework自带了一组写日志的类,都位于System.IO.Log 命名空间下
其中LogRecordSequence 提供了对公用日志文件系统 (CLFS) 日志的实现(xp不支持...)
FileRecordSequence提供了对普通日志文件的支持
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
string
logName
=
"
aaa.txt
"
;
string logContainer = " MyExtent1 " ;
int containerSize = 1024 * 1024 ;
LogRecordSequence sequence = new LogRecordSequence(logName,
FileMode.CreateNew,
FileAccess.ReadWrite,
FileShare.None);
sequence.LogStore.Extents.Add(logContainer, containerSize);
// 准备写日志
string str = " 日志内容 " ;
Encoding enc = Encoding.Unicode;
byte [] array = enc.GetBytes(str);
ArraySegment < byte > [] segments = new ArraySegment < byte > [ 1 ];
segments[ 0 ] = new ArraySegment < byte > (array);
var list = Array.AsReadOnly < ArraySegment < byte >> (segments);
// 这句话就是写日志了
sequence.Append(list, SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush);
Console.ReadLine();
return ;
string logContainer = " MyExtent1 " ;
int containerSize = 1024 * 1024 ;
LogRecordSequence sequence = new LogRecordSequence(logName,
FileMode.CreateNew,
FileAccess.ReadWrite,
FileShare.None);
sequence.LogStore.Extents.Add(logContainer, containerSize);
// 准备写日志
string str = " 日志内容 " ;
Encoding enc = Encoding.Unicode;
byte [] array = enc.GetBytes(str);
ArraySegment < byte > [] segments = new ArraySegment < byte > [ 1 ];
segments[ 0 ] = new ArraySegment < byte > (array);
var list = Array.AsReadOnly < ArraySegment < byte >> (segments);
// 这句话就是写日志了
sequence.Append(list, SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush);
Console.ReadLine();
return ;
LogRecordSequence 的性能非常好,
注:在我的机器上(windows 2008) 测试写入10000条耗时0.03秒 .(不要每写一条都Flush : 设置参数 RecordAppendOptions.None)
PS: 可以将 RetryAppend 设置为true 开启功能: 文件满的时候,自动生成另一个文件写入(如果不设置 就会抛出日志已满的异常)
PS: 不支持自动时间格式的文件名,很郁闷