При использовании обертки, как сохранить имя класса и имя метода для Log4Net для входа?

Мне нужна обертка Log4net - чтобы быть выставленным многим различным компонентам в крупном приложении. Я, очевидно, хочу сохранить имя класса и имя метода при входе, но я держался бы отдельно передачи типа и т.д. к моей обертке.

Я взглянул на этот вопрос, который очень похож на мой, но он не помог.

Я видел сделанный в этом другом вопросе с smt как следующее:

MethodBase methodBase = new StackTrace().GetFrame(1).GetMethod();
this.log.Debug(methodBase.Name + " : " + message);

Это не идеально, так как это не использует функциональность out-of-the-box Log4Net.

Я хотел бы понять то, как люди делают это, прежде чем я пойду для касательной и придумаю что-то очень сложное. Любые указатели (ссылки/ресурсы/образцы) ценятся!

7
задан Community 23 May 2017 в 10:31
поделиться

2 ответа

Я обычно добавляю что-нибудь такое ...(это вся необходимая мне функциональность)

MethodBase.GetCurrentMethod().Name

вы всегда можете создать оболочку для Log4Net, которая принимает любые необходимые вам параметры (например, MethodBase)?

2
ответ дан 7 December 2019 в 03:15
поделиться

Log4net позволяет вам получить доступ к имени метода, например, как этот% method. Это не самая быстрая операция, но если вам нужно что-то отладить, вы вполне можете ее использовать. Я считаю, что ваш вопрос касается того факта, что log4net не будет выводить правильное имя метода, если вы используете оболочку.

Чтобы решить эту проблему, вы должны посмотреть, как log4net написал реализацию ILog . По сути, это оболочка для внутреннего регистратора log4net, и поэтому та же проблема относится и к реализации ILog . Я сделал в основном следующее:

// define a field such as this
private static readonly Type ThisDeclaringType = typeof(MyLogWrapper);

// in constructor. Note: I use the internal Logger!
this.Logger = LogManager.GetLogger(name).Logger;

// I created a WriteLog method that calls the internal logger like this
// you will need to translate to the internal log levels
// message and ex are the items I want to log (ex can be null)
this.Logger.Log(MyLogWrapper.ThisDeclaringType, log4netLevel, message, ex);

Очевидно, что еще есть над чем поработать, но важные моменты отмечены.

4
ответ дан 7 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: