2013-01-18 4 views
1

Dans certaines applications, vous souhaitez toujours consigner des messages importants (comme le démarrage et la fermeture de l'application), indépendamment de le paramètre de niveau de journalisation actuel. La seule façon de garantir qu'un message important est enregistré à l'aide de frameworks tels que log4j et log4net consiste à définir le niveau de journalisation du message déclenché en tant que FATAL.Messages de journal importants mais non fatals dans les cadres de journalisation (log4j, log4net, log4php, log4cxx, NLog)

Y a-t-il un meilleur moyen de le faire, car FATAL semble une catégorie trompeuse lorsque l'application démarre correctement sans erreur?

Répondre

1

Log4net fournit toutes sortes de configuration sur la façon de se connecter et où se connecter. Vous pouvez faire des filtres à faire et des appenders spéciaux à certains messages pour enregistrer certains messages de l'info de niveau. La chose que vous voulez faire est déjà possible dans le framework log4X. Jetez un oeil à la documentation pour voir comment faire cela.

log4net manual

ILog log = LogManager.GetLogger("MyAllwaysLogMessages"); 
log.Info(.... 

Maintenant, vous pouvez filtrer sur MyAllwaysLogMessages pour les ajouter à votre journal.

2

Pour log4j (et, de même pour log4cxx), vous pourriez faire quelque chose comme ceci:

public class Always { 
    private static Logger logger = Logger.getLogger("logAlways"); 

    public static void log(String message) { 
     logger.info(message); 
    } 
} 

puis configurez l'enregistreur logAlways pour connecter tout ce qui précède INFO:

log4j.logger.logAlways=INFO 

Cela pourrait aussi être configuré via l'API pour éviter que quelqu'un ne change intentionnellement le fichier de configuration:

public class Always { 
    private static Logger logger = null; 

    static { 
    logger = Logger.getLogger("logAlways"); 
    logger.setLevel(Level.INFO); 
    } 

    public static void log(String message) { 
     logger.info(message); 
    } 
} 

Utilisez alors comme il

Always.log("Starting up"); 
0

Non, la journalisation des paramètres de messages au niveau de l'exploitation forestière disponible le plus juste pour vous assurer qu'ils sont toujours connectés est la mauvaise approche.

Tout d'abord, définissez ce que vous voulez avoir. Par exemple, pourquoi est-il important de consigner le démarrage et l'arrêt de l'application?

Notez qu'il existe plusieurs types d'enregistrement. La consignation habituelle est une sorte d'aide pour le développeur lorsqu'il étudie ce qui ne va pas. C'est la journalisation du débogage, et elle est généralement facultative, car cela n'a pas vraiment d'importance pour la partie de journalisation si l'application fonctionne ou non. Le débogage peut être fait par différents moyens si disponible.

Un autre type d'enregistrement est la journalisation d'audit. Il peut y avoir des exigences pour se connecter si et quand un utilisateur se connecte ou se déconnecte, change les mots de passe ou fait quoi que ce soit d'intéressant à un moment ultérieur, pour pouvoir vérifier que chaque action a été correctement lancée et terminée. L'un des frameworks Log4X devrait être capable de supporter les deux exigences de journalisation, mais la différence est que vous devriez les configurer différemment. La consignation de l'audit n'autorise aucun message à ne pas être envoyé à l'appendeur de consignation, mais il est très probable que les appenders soient différents de ceux de la consignation de débogage. Tirez parti du fait que vous aurez plusieurs enregistreurs et pourrez les configurer différemment.

Questions connexes