我有一个在 IIS6 或 7 上运行的 ISAPI 过滤器。当有多个工作进程(“Web garden”)时,过滤器将被加载并在每个 w3wp.exe 中运行。
如何有效地允许过滤器将其活动记录在单个合并日志文件中?
来自不同(并发)进程的日志消息不得相互干扰。换句话说,从任何 w3wp.exe 发出的单个日志消息必须在日志文件中实现为单个连续行。
日志文件的争用应该最小。这些网站每秒可以处理 100 个请求。
严格的时间顺序是首选。换句话说,如果 w3wp.exe 进程 #1 在 t1 发出消息,然后进程 #2 在 t2 发出消息,然后进程 #1 在 t3 发出消息,则消息应该以正确的时间顺序出现在日志文件中。
我目前的方法是每个进程都拥有一个单独的日志文件。这有明显的缺点。
一些想法:
指定 w3wp.exe 之一为“日志文件所有者”,并通过该特殊进程发送所有日志消息。这在工作进程回收的情况下存在问题。
使用操作系统互斥锁来保护对日志文件的访问。这足够高性能吗?在这种情况下,每个 w3wp.exe 在同一个文件系统文件上都有一个 FILE。每次写入后我必须刷新日志文件吗?这行得通吗?
有什么建议么?