Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
DIFLogAspect |
|
| 0.0;0 |
1 | /** | |
2 | * - Digitalis Internal Framework v2.0 - (C) 2007, Digitalis Informatica. | |
3 | * Distribuicao e Gestao de Informatica, Lda. Estrada de Paco de Arcos num.9 - | |
4 | * Piso -1 2780-666 Paco de Arcos Telefone: (351) 21 4408990 Fax: (351) 21 | |
5 | * 4408999 http://www.digitalis.pt | |
6 | */ | |
7 | package pt.digitalis.dif.utils.logging; | |
8 | ||
9 | import pt.digitalis.dif.startup.DIFStartupConfiguration; | |
10 | import pt.digitalis.log.ILogWrapper; | |
11 | import pt.digitalis.log.LogLevel; | |
12 | import pt.digitalis.log.Logger; | |
13 | ||
14 | /** | |
15 | * This is the framework's base logging aspect. It defines the logging appliance used as a protected member that can be | |
16 | * initialized on each sub-aspect constructor, an abstract pointcut - logPoints() - and an abstract logging method that | |
17 | * should be implemented by the sub-aspects. Access to the logger should be done through the supplied inspector. Logging | |
18 | * of all the Exceptions thrown by the framework or its client applications is also done by this aspect. Exception | |
19 | * logging is a top-level concern so it should be on the base aspect. This aspect also supplies some common pointcuts to | |
20 | * its children. These include capturing all methods and constructors execution and the exclusion of the logging | |
21 | * appliances (such as this aspects and its children as well as the Logger class and its children). | |
22 | * | |
23 | * @author Rodrigo Gonçalves <a href="mailto:rgoncalves@digitalis.pt">rgoncalves@digitalis.pt</a> | |
24 | * @created 2007/05/22 | |
25 | */ | |
26 | ||
27 | 0 | public abstract aspect DIFLogAspect { |
28 | ||
29 | /* --- Members --- */ | |
30 | ||
31 | /** The logger instance */ | |
32 | static private ILogWrapper logger; | |
33 | ||
34 | /* --- General pointcuts --- */ | |
35 | ||
36 | /** Excluding all development aspects. */ | |
37 | 0 | protected pointcut excludeAllDev() : ! within(pt.digitalis.dif.utils.development.*); |
38 | ||
39 | /** Excluding all startup classes. */ | |
40 | 0 | protected pointcut excludeAllStartup() : ! within(pt.digitalis.dif.startup.DIFStartupConfiguration); |
41 | ||
42 | /** | |
43 | * This pointcut excludes all the logging appliances such as this aspect and all its children as well as the | |
44 | * Logger class and any eventual children it will might to have. | |
45 | */ | |
46 | protected pointcut excludeLoggingAppliances() : ! within(DIFLogAspect+) && ! within(ILogWrapper+) && | |
47 | 0 | excludeAllDev() && excludeAllStartup(); |
48 | ||
49 | /** | |
50 | * Captures the execution of all methods that are not part of the aspect or the Logger class. | |
51 | */ | |
52 | 0 | protected pointcut allMethods() : execution(* pt.digitalis.dif.*..*(..)) && excludeLoggingAppliances(); |
53 | ||
54 | /** | |
55 | * Captures the execution of all constructors that are not part of the aspect or the Logger class. | |
56 | */ | |
57 | 0 | protected pointcut allConstructors() : execution(pt.digitalis.dif.*..*.new(..)) && excludeLoggingAppliances(); |
58 | ||
59 | /* --- Methods --- */ | |
60 | ||
61 | /** | |
62 | * Inspector for the defined logger object. | |
63 | * | |
64 | * @return the active logger instance | |
65 | */ | |
66 | static protected ILogWrapper getLogger() { | |
67 | ||
68 | // Lazy loading | |
69 | 0 | if (logger == null) { |
70 | 0 | LogLevel level = null; |
71 | ||
72 | // Try to get log level from DiF configurations | |
73 | try { | |
74 | 0 | level = DIFStartupConfiguration.getLogLevel(); |
75 | 0 | } catch (Exception e) { |
76 | // Catch RTEs such as NPEs and do nothing. The code below will make the logging proceed in a transparent and convenient way. | |
77 | } | |
78 | ||
79 | // If level could not be fetched before, set it to WARN | |
80 | 0 | if(level == null) |
81 | 0 | level = LogLevel.WARN; |
82 | ||
83 | // Initialize logger with the appropriate level. | |
84 | 0 | logger = Logger.getLogger("DIF Core", level); |
85 | } | |
86 | ||
87 | // Return the active logger instance | |
88 | 0 | return logger; |
89 | } | |
90 | } |