powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получение имени предыдущего метода
9 сообщений из 9, страница 1 из 1
Получение имени предыдущего метода
    #38763411
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

У меня есть вот такой метод для записи в лог:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
        public static void WriteToLog(string record, LogMessageTypes log_message_type = LogMessageTypes.Error)//, string methodname = "")
        {
            if (!WriteErrorsOnly || log_message_type == LogMessageTypes.Error)
            {
                try
                {
                    string _addition =  DateTime.Now.ToString("[dd.MM.yy] [hh:mm:ss] - ");
                    switch (log_message_type)
                    {
                        case LogMessageTypes.Error:
                            _addition += "[ERROR] ";
                            break;
                        case LogMessageTypes.Warning:
                            _addition += "[WARNING] ";
                            break;
                        default:
                            _addition += "[MESSAGE] ";
                            break;
                    }
                    _addition.PadRight(32);
                    //if(methodname != null)
                    //    _addition += "MethodName:[" + methodname + "] ";
                    string _message = _addition + record + Environment.NewLine;
                    File.AppendAllText(StartupPath + @"\Picking_log.txt", _message);
                }
                catch (Exception exx)
                {
                    throw exx;
                    WriteToLog(exx, MethodBase.GetCurrentMethod().Name, "RECURSIVE FATAL!");
                }
            }
        }

        public static void WriteToLog(Exception ex, string methodname, string message = "")
        {
            try
            {
                string _addition = DateTime.Now.ToString("[dd.MM.yy] [hh:mm:ss] - [ERROR] ");
                _addition = _addition.PadRight(32);

                if (methodname != null)
                    _addition += "MethodName:[" + methodname + "] ";
                if (message != null)
                    _addition += "Message:[" + message + "] ";
                string _message = _addition + "ExMessage: [" + ex.Message + "]" + Environment.NewLine + "ExStackTrace: [" + ex.StackTrace + "]" + Environment.NewLine;
                File.AppendAllText(StartupPath + @"\Picking_log.txt", _message);
            }
            catch (Exception exx)
            {
                throw exx;
                WriteToLog(exx, MethodBase.GetCurrentMethod().Name, "RECURSIVE FATAL!");
            }
        }



Сейчас вызов метода я произвожу вот так:
Код: c#
1.
Global.WriteToLog(ex, MethodBase.GetCurrentMethod().Name, "Дополнительные сведения, если хочу их казать");



Вопрос:
Можно ли как-то получение имени предыдущего метода, который вызвал запись в лог, запихнуть в сам метод записи в лог, чтобы каждый раз не указывать MethodBase.GetCurrentMethod().Name?

Так же здоровая критика сего творения приветствуется!
...
Рейтинг: 0 / 0
Получение имени предыдущего метода
    #38763493
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.Так же здоровая критика сего творения приветствуется!
Не изобретать велосипед, и использовать NLog. Там всё это давно уже реализовано.
...
Рейтинг: 0 / 0
Получение имени предыдущего метода
    #38763537
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Получение имени предыдущего метода
    #38763578
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку., в .NET 4.5 добавили атрибут CallerMemberName специально для этой цели. Если у тебя .NET 4.0, то его тоже можно использовать через Microsoft BCL Portability Pack . Убедись только что он срабатывает. На stackoverflow пишут что для его работы требуется обновление KB2468871 .
...
Рейтинг: 0 / 0
Получение имени предыдущего метода
    #38763627
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StackTrace Class в помощь.
...
Рейтинг: 0 / 0
Получение имени предыдущего метода
    #38763632
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.
string _addition = DateTime.Now.ToString("[dd.MM.yy] [hh:mm:ss] - [ERROR] ");
_addition = _addition.PadRight(32);

if (methodname != null)
_addition += "MethodName:[" + methodname + "] ";
if (message != null)
_addition += "Message:[" + message + "] ";
string _message = _addition + "ExMessage: [" + ex.Message + "]" + Environment.NewLine + "ExStackTrace: [" + ex.StackTrace + "]" + Environment.NewLine;


Все в StringBuilder запихнуть

catch (Exception exx)
{
throw exx;
WriteToLog(exx, MethodBase.GetCurrentMethod().Name, "RECURSIVE FATAL!");
}
...
Рейтинг: 0 / 0
Получение имени предыдущего метода
    #38763651
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ку.
Код: c#
1.
2.
3.
4.
5.
catch (Exception exx)
{
    throw exx;
    WriteToLog(exx, MethodBase.GetCurrentMethod().Name, "RECURSIVE FATAL!");
}


Это бессмысленная конструкция. Код после throw никогда не выполнится. Убери try/catch вообще.
...
Рейтинг: 0 / 0
Получение имени предыдущего метода
    #38765294
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати говоря в C# планируют добавить ключевое слово nameof которое будет помогать в подобных ситуациях - The New and Improved C# 6.0
...
Рейтинг: 0 / 0
Получение имени предыдущего метода
    #38840449
Алексей Ку.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Последовал совету и разобрался с NLog. Весчь! Очень крутая шутка! Спасибо за совет!

Все остальные рекомендации даже не проверял. Всё для меня решил Nlog. Но всем огромное спасибо, что откликнулись!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получение имени предыдущего метода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]