Як увімкнути журнал відмов зв'язання (Fusion) в .NET


818

Як увімкнути ведення журналу відмов (Fusion) в .NET?


46
Якщо когось хвилює, щоб скористатися fusion logger (fuslogvw.exe), прочитайте цю статтю: msdn.microsoft.com/en-us/library/e74a18c4(v=VS.100).aspx повідомляє вам, де його завантажити та іншу інформацію.

13
@Will - дякую за обмін! Як бонус - обов'язково працюйте fuslogvw.exeв якості адміністратора, щоб уникнути будь-яких проблем з правами.
SliverNinja - MSFT

13
@ Я не погоджуюся, що встановлення fuslogvw - це "найкраща" відповідь. Якщо ви могли б отримати лише інструмент без встановлення цілого пакета SDK Windows на те, що, ймовірно, не є середовищем для розробки, тоді ви матимете точку.
Coxy

2
@ Звичайно, але відповідь, на яку ви посилаєтесь, не охоплює нічого з цього.
Coxy

8
@ Будь ласка, не будьте так по-дитячому з цього приводу. Ви намагаєтеся зібрати представників, просуваючи відповідь, що, хоча і корисна, спільнота визнала менш корисною, ніж інші, та, яка набагато простіша, а інша - практично однакова.
Coxy

Відповіді:


868

Додайте такі значення до

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion
Додати:
DWORD ForceLog встановив значення 1
DWORD LogFailures встановив значення 1
DWORD LogResourceBinds встановлює значення 1
DWORD EnableLog встановлено значенням 1
Рядок встановленого значення LogPath для папки для журналів (наприклад, C: \ FusionLog \)

Переконайтеся, що ви додаєте зворотну косу рису після назви папки та чи існує папка .

Вам потрібно перезапустити програму, яку ви запускаєте, щоб змусити її прочитати ці параметри реєстру.

До речі, не забувайте вимикати журнал синтезу, коли це не потрібно.

введіть тут опис зображення


23
Рішення Гері працювали на мене, хоча мені також доводилося виконувати перезавантаження IIS. Примітка. Я налаштував це в чистому середовищі, де я не хотів встановлювати SDK тощо.
Мічес

5
Повідомляли деякі, що зміна реєстру не проходить відразу. Ви намагалися ввімкнути Fusion logging та перезавантажити?
Гері Кіндель

54
Вам потрібно перезапустити будь-яку програму, яку ви запустите, щоб прочитати ці параметри реєстру
Orion Edwards

50
Переглядач журналів Fusion робить все це для вас. Перейдіть до Пуск -> Програми -> Visual Studio xxxx> Інструменти Visual Studio> Командний рядок Visual Studio (запустіть як адміністратор) та введіть "fuslogvw". У налаштуваннях ви налаштовуєте ведення журналу.
r3mark

10
Щоб увімкнути / вимкнути журнал зручно, я створив .reg файли, які базуються на відповіді Гері Кінделя: включення та відключення .
Ігор Кустов

271

Зазвичай я використовую переглядач журналів Fusion ( Fuslogvw.exe з командного рядка Visual Studio або Переглядач журналів Fusion з меню "Пуск") - моя стандартна установка:

  • Відкрийте переглядач журналів Fusion як адміністратор
  • Клацніть налаштування
  • Установіть прапорець увімкнути прапорець Включити спеціальний шлях журналу
  • Введіть, наприклад, місце, в яке потрібно записувати журнали c:\FusionLogs( Важливо: переконайтеся, що ви фактично створили цю папку у файловій системі.)
  • Переконайтеся, що правильний рівень реєстрації ввімкнено (я іноді просто вибираю Журнал усіх прив’язків до диска, щоб переконатися, що все працює правильно)
  • Натисніть кнопку ОК
  • Встановіть параметр розташування журналу на спеціальний

Не забудьте вимкнути вихід із системи, як тільки ви закінчите!

(Я щойно опублікував це на подібне запитання - я думаю, що це теж актуально.)


4
Зауважте, що у випадках, коли ви хостите час роботи з власного додатка, вам потрібно буде використовувати користувальницький шлях до журналу з якоїсь причини, інакше ви нічого не будете реєструвати.
jpierson

Принаймні в моїй ситуації мені насправді не довелося встановлювати власні шляхи до журналу. Все, що мені потрібно було зробити, це увімкнути вхід у систему, наприклад, "Журнал усіх прив’язок до диска" у діалоговому вікні налаштувань.
Джош

42
У моєму випадку вимагати запуск адміністратора, інакше всі параметри було вимкнено.
везенков

2
Примітка: створити папку як адміністратор!
Таброк

6
Переконайтеся, що ви працюєте fuslogvwне лише як адміністратор, але й правильний шлях SDK для Windows, який використовує проект Visual Studio, який викидає виняток. Перевірте його csproj і знайдіть SDK всередині (мій вузол sdk названий TargetFrameworkSDKToolsDirectory). Використання невідповідної версії fuslogvw, здається, не сприймає винятків (що має сенс ...)
Веверке,

191

Якщо на вашому комп'ютері встановлено пакет SDK для Windows, ви знайдете "Переглядач журналів Fusion" в розділі Microsoft SDK \ Tools (просто введіть "Fusion" у меню "Пуск" на Vista або Windows 7/8). Запустіть його, натисніть кнопку "Налаштування" та виберіть "Помилка журналу помилок" або "Журнал усіх прив'язок".

Якщо ці кнопки відключені, поверніться до меню «Пуск», клацніть правою кнопкою миші Переглядач журналів і виберіть «Запустити як адміністратор».


6
Ці кнопки для мене відключені - чому?
Тім Ловелл-Сміт

14
@Tim, не бачив цього раніше - чи це може бути пов'язано з привілеями адміністратора? Зрештою, це модифікація HKEY_LOCAL_MACHINE.
Семюель Джек

2
"Налаштування, помилки прив'язки журналу" було достатньо, щоб знайти мою проблему.
pauloya

1
Переконайтеся, що папка дозволяє отримати доступ до запису. UAC та c: \ logs не грають добре з журналом fusion
Edward Wilde

4
Як зауваження, якщо кнопки відключені, запускайте програму перегляду журналу синтезу з правами адміністратора.
Бруно Лопес

86

Встановіть таке значення реєстру:

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion! EnableLog] (DWORD) до 1

Щоб відключити, встановіть значення 0 або видаліть значення.

[редагувати]: Збережіть наступний текст у файлі, наприклад, FusionEnableLog.reg, у форматі редактора реєстру Windows:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001

Потім запустіть файл з Windows Explorer і проігноруйте попередження про можливі пошкодження.


4
Не те, що запис, ймовірно, не буде - вам доведеться створити його. Принаймні, я це робив, коли я збирався відповісти на це питання безпосередньо перед аварією сьогодні вранці :)
Джон Скіт

3
Що робить! означає? Ключ чи значення? А як щодо 64-бітових систем?
Бруно Мартінес

48
насправді це працює, просто потрібно запустити iisreset післямови, щоб змусити його працювати.
Нік ДеМайо

4
@Norman: Оскільки саме ця настройка використовується для того, щоб помилки Asp.Net показували повідомлення про помилки в зборі на сторінках помилок, а не для збереження журналів у файл. @OP: +1. Відредаговано, щоб включити .reg файл. The! Формат - такий, якого я ніколи не бачив, за винятком повідомлення про помилку, яке надіслав мене на цю сторінку, шукаючи відповіді.
Брайан

2
Вам не потрібно скидати IIS - лише відповідний пул програм. Або принаймні це було все, що мені потрібно було зробити.
Кенні Евітт

81

Ви можете запустити цей скрипт Powershell як адміністратор, щоб увімкнути FL:

Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name ForceLog         -Value 1               -Type DWord
Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogFailures      -Value 1               -Type DWord
Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogResourceBinds -Value 1               -Type DWord
Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogPath          -Value 'C:\FusionLog\' -Type String
mkdir C:\FusionLog -Force

і цей відключити:

Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name ForceLog
Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogFailures
Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogResourceBinds
Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogPath

4
Дякую! Я дозволив собі ввести ваші команди в цю суть . І я додав створення c:\FusionLogрежисуру, щоб люди цього не забували ;-)
Олівер

Правила командного рядка! Я міг би швидко відтворити це за допомогою найкращої придуманої на сьогодні технології повторного використання коду під назвою "вирізати та вставити". Дякую.
Remigijus Pankevičius

20

Чейнджера сценарій Fusion Log Settings перегляду це не жоден бар кращий спосіб зробити це.

В ASP.NET часом непросто було змусити це правильно працювати. Цей сценарій чудово працює і був занесений до списку електроінструментів Скотта Хензельмана . Я особисто ним користувався роками, і це ніколи мене не підводило.


ps ПЕРЕКОНАЙТЕ, що ви відключите її після запуску,
інакше

саме тому я використовую ETW, щоб входити в журнал даних, якщо вони мені справді потрібні, а не весь час у некрасивому великому файлі журналу.
magicandre1981

13

Замість використання потворного файлу журналу, ви також можете активувати журнал Fusion через ETW / xperf , включивши приватний провайдер DotnetRuntime ( Microsoft-Windows-DotNETRuntimePrivate) з GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CAта FusionKeywordключовим словом (0x4).

@echo off
echo Press a key when ready to start...
pause
echo .
echo ...Capturing...
echo .

"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -on PROC_THREAD+LOADER+PROFILE -stackwalk Profile -buffersize 1024 -MaxFile 2048 -FileMode Circular -f Kernel.etl
"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -start ClrSession -on Microsoft-Windows-DotNETRuntime:0x8118:0x5:'stack'+763FD754-7086-4DFE-95EB-C01A46FAF4CA:0x4:0x5 -f clr.etl -buffersize 1024

echo Press a key when you want to stop...
pause
pause
echo .
echo ...Stopping...
echo .

"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -start ClrRundownSession -on Microsoft-Windows-DotNETRuntime:0x8118:0x5:'stack'+Microsoft-Windows-DotNETRuntimeRundown:0x118:0x5:'stack' -f clr_DCend.etl -buffersize 1024 

timeout /t 15

set XPERF_CreateNGenPdbs=1

"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -stop ClrSession ClrRundownSession 
"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -stop
"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -merge kernel.etl clr.etl clr_DCend.etl Result.etl -compress
del kernel.etl
del clr.etl
del clr_DCend.etl

Коли ви тепер відкриєте файл ETL в PerfView і заглянете в таблицю Події, ви можете знайти дані Fusion:

Fusion події в PerfView


@YuriBondarchuk це активує його на вимогу, і у вас є більше даних у ETL (інші процеси, дані про файлові перетворення), щоб ви могли надати файли t іншим користувачам, і вони зможуть отримати набагато більше інформації порівняно зі звичайним журналом синтезу
magicandre1981,

12

Я написав переглядач журналів збірки журналів на ім'я Fusion ++ і помістив його на GitHub .

Ви можете отримати останню версію звідси або за допомогою шоколаду ( choco install fusionplusplus).

Я сподіваюся, що ви та деякі відвідувачі тут зможете заощадити кілька гідних хвилин життя.

Fusion ++


1
Шановний пане, ти бог!
Sylvain Girard

1
Це дивовижний інструмент, дуже дякую!
simoneL

3

Якщо у вас вже ввімкнено журнал, і ви все ще отримуєте цю помилку в Windows 7 64 біт, спробуйте це в IIS 7.5:

  1. Створіть новий пул програм

  2. Перейдіть до розширених налаштувань цього пулу програм

  3. Встановіть 32-бітну програму Enable на True

  4. Наведіть веб-додаток на використання цього нового пулу


чоловіче, ти врятуєш мені день, мені було потрібно близько 8 годин, щоб вирішити проблему. дуже дякую. :)
Dika Arta Karunia

3

Просто невеликий шматочок інформації, який може допомогти іншим; якщо ви робите щось за принципом пошуку всіх збірок у деякому каталозі для класів, які успадковують / реалізують класи / інтерфейси, тоді переконайтеся, що ви очистили несвіжі збірки, якщо ви отримаєте цю помилку, що стосується однієї з ваших власних збірок.

Сценарій був би таким:

  1. Збірка A завантажує всі збори в деяку папку
  2. Збірка B у цій папці несвіжа, але посилається на збірку C
  3. Асамблея C існує, але простори імен, назви класів або якась інша деталь, можливо, змінилися за час, що минув з моменту, коли збірка B стала черствою (у моєму випадку простір імен було змінено через процес рефакторингу)

Якщо коротко: A --- завантажує -> B (несвіжий) --- посилання ---> C

Якщо це трапляється, єдиним сигнальним сигналом є простір імен та ім’я класу у повідомленні про помилку. Вивчіть його уважно. Якщо ви не можете знайти його де-небудь у своєму рішенні, ви, ймовірно, намагаєтесь завантажити черствий вузол.


3

Для тих, хто трохи ледачий, я рекомендую запустити це у вигляді файлу bat, коли коли-небудь захочете його ввімкнути:

reg add "HKLM\Software\Microsoft\Fusion" /v EnableLog /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v ForceLog /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v LogFailures /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v LogResourceBinds /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v LogPath /t REG_SZ /d C:\FusionLog\

if not exist "C:\FusionLog\" mkdir C:\FusionLog

1

Про всяк випадок, коли вам цікаво розташування FusionLog.exe - ви знаєте, що у вас є, але ви не можете його знайти? Я шукав FUSLOVW в останні кілька років знову і знову. Після переходу на .NET 4.5 кількість версій FUSION LOG вибухнула. Її місця можна знайти на диску, залежно від встановленого програмного забезпечення:

C: \ Програмні файли (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Інструменти \ x64

C: \ програмні файли (x86) \ Microsoft SDKs \ Windows \ v7.0A \ bin \ x64

C: \ Програмні файли (x86) \ Microsoft SDK \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Інструменти \ x64

C: \ Файли програми (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Інструменти

C: \ Програмні файли (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Інструменти

C: \ Програмні файли (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin


0

У моєму випадку допомогло ввести ім’я диска в нижньому регістрі

Неправильно - C: \ someFolder

Правильно - c: \ someFolder

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.