我有一个使用log4Net管理日志的PowerShell脚本。日志记录在日志文件和MS SQL数据库中。该脚本使用带有运行空间的多线程。
问题是多个线程同时管理多个对象并记录不同对象上的大量数据。我需要按对象对日志进行重新分组。一个例子将帮助我更好地解释自己!^^
log file line 1 OBJECT 1.ACTION 1
log file line 2 OBJECT 1.ACTION 2
log file line 3 OBJECT 1.ACTION 3
log file line 4 object2.action1
log file line 5 object3.action1
log file line 6 OBJECT 1.ACTION 4
log file line 7 object2.action2
log file line 8 OBJECT 1.ACTION 5
…为了管理这个插入日志的问题,我计划在对象处理结束时登录内存,例如在一个表中;使用mutex阻塞其他线程,并使用foreach循环写入所有日志。
Main {
Treat object {
Action1 -> Logs +=log1
Action2 -> Logs +=log2
…
}
System.Threading.Mutex WaitOne()
For each ($log in $Logs) {
Write in log file
Write in SQL DB
}
System.Threading.Mutex ReleaseMutex()
}我想知道是否有更好的解决方案来管理多个运行空间的插入日志问题。
Log4Net也许可以在本地管理这一点;将所有日志存储在内存中,并仅在我键入命令时才“提交”写操作?或者其他一些不使用Mutex的解决方案?
发布于 2015-08-26 01:19:27
一种方法是每个组使用一个记录器,如果您事先不知道组的数量,可以只使用create the loggers dynamically。
如果您更喜欢使用一个记录器,最佳实践通常是在事件发生时记录事件,然后进行分组,例如在显示日志时。在SQL语言中,只需为分组条件添加一列,或者对于文本文件,可以使用unix sort命令。
https://stackoverflow.com/questions/32070148
复制相似问题