Bunch o' bug fixes, all IdP configuration files now load.
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / idp / config / service / IdPLoggingService.java
1 /*
2  * Copyright [2007] [University Corporation for Advanced Internet Development, Inc.]
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package edu.internet2.middleware.shibboleth.idp.config.service;
18
19 import java.util.Timer;
20
21 import org.apache.log4j.Logger;
22 import org.opensaml.log.Level;
23 import org.opensaml.util.resource.FilesystemResource;
24 import org.opensaml.util.resource.ResourceChangeWatcher;
25 import org.opensaml.util.resource.ResourceException;
26 import org.opensaml.xml.util.DatatypeHelper;
27
28 import edu.internet2.middleware.shibboleth.common.log.Log4jConfigFileResourceListener;
29
30 /**
31  * Logging service for the IdP.
32  */
33 public class IdPLoggingService {
34
35     /** Location of the Log4j configuration file. */
36     private FilesystemResource loggingConfiguration;
37
38     /** Timer used to schedule configuration file polling. */
39     private Timer taskTimer;
40
41     /**
42      * Constructor.
43      * 
44      * @param timer timer used to schedule configuration file polling
45      * @param logConf location, on the filesystem, of the log4j configuration file
46      * 
47      * @throws ResourceException thrown if the given configuration file does not exist
48      */
49     public IdPLoggingService(Timer timer, String logConf) throws ResourceException {
50         taskTimer = timer;
51         loggingConfiguration = new FilesystemResource(DatatypeHelper.safeTrimOrNullString(logConf));
52         if (!loggingConfiguration.exists()) {
53             throw new ResourceException("Logging configuration file does not exist: "
54                     + loggingConfiguration.getLocation());
55         }
56     }
57
58     /**
59      * Initializes the logging service.
60      * 
61      * @throws ResourceException thrown if logging configuration file does not exist
62      */
63     public void initialize() throws ResourceException {
64         ResourceChangeWatcher configurationWatcher = new ResourceChangeWatcher(loggingConfiguration, 1000 * 60);
65         configurationWatcher.getResourceListeners().add(new Log4jConfigFileResourceListener());
66         taskTimer.schedule(configurationWatcher, 0, configurationWatcher.getPollingFrequency());
67         Logger log = Logger.getLogger(IdPLoggingService.class);
68         log.log(Level.CRITICAL, "Logging service initialized");
69     }
70
71     /**
72      * Gets the location of the logging configuration file.
73      * 
74      * @return location of the logging configuration file
75      */
76     public String getLoggingConfigurationLocation() {
77         return loggingConfiguration.getLocation();
78     }
79 }