View Javadoc

1   /*
2    * Licensed to the University Corporation for Advanced Internet Development, 
3    * Inc. (UCAID) under one or more contributor license agreements.  See the 
4    * NOTICE file distributed with this work for additional information regarding
5    * copyright ownership. The UCAID licenses this file to You under the Apache 
6    * License, Version 2.0 (the "License"); you may not use this file except in 
7    * compliance with the License.  You may obtain a copy of the License at
8    *
9    *    http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package edu.internet2.middleware.shibboleth.common.log;
19  
20  import java.util.Timer;
21  
22  import org.opensaml.util.resource.FilesystemResource;
23  import org.opensaml.util.resource.Resource;
24  import org.opensaml.util.resource.ResourceChangeWatcher;
25  import org.opensaml.util.resource.ResourceException;
26  import org.slf4j.LoggerFactory;
27  
28  import ch.qos.logback.classic.LoggerContext;
29  import ch.qos.logback.core.status.ErrorStatus;
30  import ch.qos.logback.core.status.StatusManager;
31  
32  /**
33   * Simple logging service that watches for logback configuration file changes and reloads the file when a change occurs.
34   */
35  public class LogbackLoggingService {
36  
37      /**
38       * Constructor.
39       *
40       * @param taskTimer resource watchdog task timer
41       * @param loggingConfigurationFile logback configuration file
42       * @param pollingFrequency frequency the configuration file should be checked for changes
43       */
44      public LogbackLoggingService(Timer taskTimer, String loggingConfigurationFile, long pollingFrequency) {
45          LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
46          StatusManager statusManager = loggerContext.getStatusManager();
47          
48          try{
49              Resource configResource = new FilesystemResource(loggingConfigurationFile);
50              LogbackConfigurationChangeListener configChangeListener = new LogbackConfigurationChangeListener();
51              configChangeListener.onResourceCreate(configResource);
52              
53              ResourceChangeWatcher resourceWatcher = new ResourceChangeWatcher(configResource, pollingFrequency, 5);
54              resourceWatcher.getResourceListeners().add(configChangeListener);
55              
56              taskTimer.schedule(resourceWatcher, 0, pollingFrequency);
57          }catch(ResourceException e){
58              statusManager.add(new ErrorStatus("Error loading logging configuration file: "
59                      + loggingConfigurationFile, this, e));
60          }
61      }
62  }