que hice es crear una pequeña C++ solución que funciona muy bien trazado. Dentro de un proceso todo está bien, pero cuando abro el archivo de salida de diferentes procesos, los datos no se escriben correctamente. Abrí el archivo con FILE_SHARE_WRITE para poder escribir en el archivo cuando ya está abierto. Luego creé un mutex con nombre para asegurar la sincronización adecuada entre los procesos. Pero parece que esto no es suficiente. Según MSDN, esto funciona dentro de un proceso, pero no entre procesos diferentes. Luego intenté llamar a FlushFileBuffers después de cada escritura mientras el mutex todavía estaba retenido pero los datos todavía estaban distorsionados comoEscribir fiable a mismo archivo desde diferentes procesos
El formato es id del proceso del tiempo/método de identificación del subproceso entrar/salir/gravedad namespace + method y luego el texto del mensaje .
10:29:42.994 7448/2236 }} Dll2.Test.fndll2 L1 -> Duration: 0.094s
10:29:43.040 7448/2236 {{ Dll2.DllMain L1
10:29:43.134 7448/2236 Info Dll2.DllMain L1 Process detach
10:29:43.181 7448/2236 }} Dll2.DllMain L1 -> Duration: 0.141s
}} Dll2.DllMain L1 -10:29:42.681 7448/2236 Info Dll1.DllMain L1 Process attach
10:29:42.728 7448/2236 }} Dll1.DllMain L1 -10:29:42.744 2216/5510:29:42.775 7448/2236 {{ Dll1.Test.fndll1 10:210:29:42.822 7448/2236 Info Dll1.Test.fndll1 10:29:42.837 2216/557610:29:42.853 7448/2236 }} Dll1.Test.fndll1 L110:29:42.884 2216/557610:29:43.306 7448/2236 {{ Dll1.DllMain L1
10:29:43.353 7448/2236 Info Dll1.DllMain L1 Process detach
10:29:43.400 7448/2236 }} Dll1.DllMain L1 -> Duration: 0.094s
He mirado FILE_FLAG_NO_BUFFERING pero tiene sus limitaciones severas y parece not easy to use.
¿Alguien sabe la manera correcta de escribir sincronizado con el mismo archivo sin distoriting la salida?
Suyo,
Alois Kraus
¿Es posible implementar la solución de rastreo como un servidor COM? –
@spong no solo es la forma "incorrecta", ¡ni siquiera funciona! –
OK, es suficiente - comentario eliminado. – msandiford