Как я могу получить больше информации в мои журналы SharePoint? - PullRequest
1 голос
/ 12 января 2011

Я установил компонент в производственную среду, но теперь выдает следующую ошибку:

Метод Execute определения задания SharePointSocialNetworking.Facebook (Я БЫ 528d61e4-95b6-4766-bb98-4363da570506) бросил исключение. Дополнительная информация включен ниже. Ссылка на объект не установлен для экземпляра объекта.

Трассировка стека исключений: в SharePointSocialNetworking.Facebook.Execute (Guid targetInstanceId) в Microsoft.SharePoint.Administration.SPTimerJobInvoke.Invoke (TimerJobExecuteData & данные, Int32 и результат)

Моя проблема в том, что моя трассировка стека останавливается так же, как становится полезной ... Мне нужно знать, ГДЕ в методе Execute происходит сбой (возможно, даже номер строки). Они просто дают мне достаточно информации, чтобы иметь общее представление о том, в чем проблема, а не о том, где она происходит ...

Есть ли где-нибудь, чтобы получить трассировку ПОЛНОГО стека или отследить, где именно моя «ссылка на объект не установлена ​​на экземпляр объекта». ошибка происходит?

В моем разделе «Ведение журнала диагностики» в центральном администраторе для меня «Наименее критично даже для отчета в журнал событий» установлено значение «Ошибка» и «Наименее критическое событие для отчета в журнал трассировки» установлено на «Подробно».

Это для работы по таймеру.

Ответы [ 2 ]

1 голос
/ 12 января 2011

Поскольку ваши pdbs не упакованы и не развернуты, вы не можете получить номера строк из ваших исключений

Как включить номера строк в трассировку стека без pdb?

Но я обхожу это путем создания «сообщения» в процессе, вы знаете, где происходит ошибка из-за значения в «сообщении».

Все мои задания на sharepoint структурированы примерно так:

public class CustomJob : SPJobDefinition {
    public override void Execute() {
        try {
            WriteTrace("CustomJob.Execute:");
            Process();
            WriteTrace("CustomJob.Execute[end]");
        } catch (Exception ex) {
            WriteTrace(string.Format("CustomJob.Execute\nException: {0}", ex));
        }
    }
    public void Process() {
        string message = "CustomJob.Process\n";
        try {
            //do something
            message += "value1: " + value1 + "\n";
            //do something
            message += "value2: " + value2 + "\n";
            //do something
            message += "value3: " + value3 + "\n";
        } catch (Exception ex) {
            WriteTrace(string.Format("CustomJob.Process\nException: {0}", ex));
        }
        WriteTrace(message);
    }
    private void WriteTrace(string message) {
        //configure how you need, either write to ULS or write to event log
        SPDiagnosticsService.Local.WriteTrace(0, 
            new SPDiagnosticsCategory("My Category", 
            TraceSeverity.Unexpected, 
            EventSeverity.Error), 
            TraceSeverity.Unexpected, message, ex.StackTrace);
    }
}

Это позволяет мне достаточно точно отследить большинство ошибок при разработке и производстве

EDIT

Есть способы записи в журналы трассировки в 2007 году (более сложный, конечно)

http://weblogs.asp.net/erobillard/archive/2008/07/31/sharepoint-trace-logs-and-the-unified-logging-service-uls.aspx

http://msdn.microsoft.com/en-us/library/aa979522%28v=office.12%29.aspx

http://weblogs.asp.net/gunnarpeipman/archive/2009/02/25/sharepoint-writing-messages-to-uls-unified-logging-system.aspx

Но я просто написал прямо в журнал событий:

        EventLog el1 = new EventLog();
        el1.Source = "My Custom Source";
        el1.WriteEntry(message, EventLogEntryType.Information);
0 голосов
/ 12 января 2011

Если это ваше пользовательское задание таймера, почему бы вам не отладить его в интерактивном режиме, подключившись к owstimer.exe.См. Задания по отладке таймера:

http://msdn.microsoft.com/en-us/library/ff798310.aspx

Что касается вопроса трассировки, вы можете записать StackTrace свойство строки объекта Exception в журнал трассировки, как указано в других сообщениях.

...