Почему не там уровень трассировки в log4Net?

Josh Bloch польза Ваш подход:

причина, что я одобряю эти instanceof подход, состоит в том, что, когда Вы используете эти getClass подход, у Вас есть ограничение, которое объекты только равны другим объектам того же класса, того же типа выполнения. Если Вы расширите класс и добавите несколько безвредных методов к нему, то проверьте, чтобы видеть, равен ли некоторый объект подкласса объекту суперкласса, даже если объекты равны по всем важным аспектам, то Вы получите удивительный ответ, что они не равны. На самом деле это нарушает строгую интерпретацию принцип замены Лисков и может привести к очень удивительному поведению. В Java это особенно важно, потому что большинство наборов (HashTable, и т.д.) на основе, равняется методу. Если Вы поместите члена суперкласса в хэш-таблице как ключ и затем посмотрите он использование экземпляра подкласса, то Вы не найдете его, потому что они не равны.

Видят также это, ТАК ответьте .

Эффективная глава 3 Java также касается этого.

32
задан Jaymin 18 October 2019 в 08:53
поделиться

3 ответа

Интерфейс log4net.ILog предоставляет методы и свойства только для уровней Fatal, Error, Warn, Info и Debug.

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

9
ответ дан 27 November 2019 в 20:17
поделиться

Там есть уровень трассировки в классе log4net.Core.Level http://logging.apache.org/log4net/release/sdk/html/ F_log4net_Core_Level_Trace.htm

13
ответ дан 27 November 2019 в 20:17
поделиться

Вы можете добавить подробный (или уровень трассировки) в log4net, используя методы расширения. Вот что я использую:

public static class ILogExtentions
{       
    public static void Trace(this ILog log, string message, Exception exception)
    {
        log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, 
            log4net.Core.Level.Trace, message, exception);
    }

    public static void Trace(this ILog log, string message)
    {
        log.Trace(message, null);
    }

    public static void Verbose(this ILog log, string message, Exception exception)
    {
        log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, 
            log4net.Core.Level.Verbose, message, exception);
    }

    public static void Verbose(this ILog log, string message)
    {
        log.Verbose(message, null);
    }

}

Пример использования:

public class ClientDAO
{
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(ClientDAO));

    public void GetClientByCode()
    {
        log.Trace("your verbose message here");
        //....
    }
}

Источник:

http://www.matthewlowrance.com/post/2010/07/14/Logging-to-Trace-Verbose-etc- with-log4net.aspx

52
ответ дан 27 November 2019 в 20:17
поделиться
Другие вопросы по тегам:

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