View Javadoc
1   /**
2    * Copyright (C) 2014-2017 Philip Helger (www.helger.com)
3    * philip[at]helger[dot]com
4    *
5    * Licensed under the Apache License, Version 2.0 (the "License");
6    * you may not use this file except in compliance with the License.
7    * 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  package com.helger.schematron.pure.errorhandler;
18  
19  import javax.annotation.Nonnull;
20  import javax.annotation.Nullable;
21  
22  import org.slf4j.Logger;
23  import org.slf4j.LoggerFactory;
24  
25  import com.helger.commons.error.level.IErrorLevel;
26  import com.helger.commons.io.resource.IReadableResource;
27  import com.helger.commons.lang.ClassHelper;
28  import com.helger.commons.log.LogHelper;
29  import com.helger.commons.string.StringHelper;
30  import com.helger.schematron.pure.model.IPSElement;
31  import com.helger.schematron.pure.model.IPSHasID;
32  
33  /**
34   * An implementation if {@link IPSErrorHandler} that logs to an SLF4J logger.
35   *
36   * @author Philip Helger
37   */
38  public class LoggingPSErrorHandler extends AbstractPSErrorHandler
39  {
40    private static final Logger s_aLogger = LoggerFactory.getLogger (LoggingPSErrorHandler.class);
41  
42    public LoggingPSErrorHandler ()
43    {
44      super ();
45    }
46  
47    public LoggingPSErrorHandler (@Nullable final IPSErrorHandler aNestedErrorHandler)
48    {
49      super (aNestedErrorHandler);
50    }
51  
52    @Nonnull
53    public static String getLogMessage (@Nullable final IReadableResource aRes,
54                                        @Nullable final IPSElement aSourceElement,
55                                        @Nonnull final String sMessage)
56    {
57      return StringHelper.getImplodedNonEmpty (" - ",
58                                               aRes == null ? null : aRes.getPath (),
59                                               aSourceElement == null ? null
60                                                                      : ClassHelper.getClassLocalName (aSourceElement),
61                                               aSourceElement instanceof IPSHasID &&
62                                                                                                                        ((IPSHasID) aSourceElement).hasID () ? "ID " + ((IPSHasID) aSourceElement).getID () : null,
63                                               sMessage);
64    }
65  
66    @Override
67    protected void handle (@Nullable final IReadableResource aRes,
68                           @Nonnull final IErrorLevel aErrorLevel,
69                           @Nullable final IPSElement aSourceElement,
70                           @Nonnull final String sMessage,
71                           @Nullable final Throwable t)
72    {
73      LogHelper.log (s_aLogger, aErrorLevel, getLogMessage (aRes, aSourceElement, sMessage), t);
74    }
75  }