| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| |
| using System; |
| using System.Runtime.ExceptionServices; |
| using Org.Apache.REEF.Utilities.Attributes; |
| using Org.Apache.REEF.Utilities.Logging; |
| |
| namespace Org.Apache.REEF.Utilities.Diagnostics |
| { |
| [Private] |
| [Obsolete("TODO[JIRA REEF-1467] This class will be removed")] |
| public static class Exceptions |
| { |
| #region methods |
| /// <summary> |
| /// Call this method to throw an exception. |
| /// </summary> |
| /// <remarks> |
| /// Calling this method will trace the exception and do other common processing, |
| /// and then it will throw the exception. This method traces the exception type |
| /// and message at error level and the full stack trace at all other levels. |
| /// </remarks> |
| /// <example> |
| /// Exceptions.Throw(new Exception("Some exception")); |
| /// </example> |
| /// <param name="exception">The exception to be thrown.</param> |
| /// <param name="message">The message from the caller class.</param> |
| /// <param name="logger">The logger from the caller class.</param> |
| public static void Throw(Exception exception, string message, Logger logger) |
| { |
| string logMessage = string.Concat(DiagnosticsMessages.ExceptionThrowing, " ", exception.GetType().Name, " ", message); |
| if (logger == null) |
| { |
| Console.WriteLine("Exception caught before logger is initiated, error message: " + logMessage + exception.Message); |
| } |
| else |
| { |
| logger.Log(Level.Error, logMessage, exception); |
| } |
| ExceptionDispatchInfo.Capture(exception).Throw(); |
| } |
| |
| /// <summary> |
| /// Call this method to throw an exception. |
| /// </summary> |
| /// <remarks> |
| /// Calling this method will trace the exception and do other common processing, |
| /// and then it will throw the exception. This method traces the exception type |
| /// and message at error level and the full stack trace at all other levels. |
| /// </remarks> |
| /// <example> |
| /// Exceptions.Throw(new Exception("Some exception")); |
| /// </example> |
| /// <param name="exception">The exception to be thrown.</param> |
| /// <param name="logger">The logger of the caller class.</param> |
| public static void Throw(Exception exception, Logger logger) |
| { |
| Throw(exception, string.Empty, logger); |
| } |
| |
| /// <summary> |
| /// Call this method every time when an exception is caught. |
| /// </summary> |
| /// <remarks> |
| /// Calling this method will trace the exception and do other common processing. |
| /// This method traces the exception type and message at error level and the full |
| /// stack trace at all other levels. |
| /// </remarks> |
| /// <example> |
| /// try |
| /// { |
| /// // Some code that can throw |
| /// } |
| /// catch (Exception e) |
| /// { |
| /// Exceptions.Caught(e); |
| /// // Exception handling code |
| /// } |
| /// </example> |
| /// <param name="exception">The exception being caught.</param> |
| /// <param name="level">The log level.</param> |
| /// <param name="logger">The logger from the caller class.</param> |
| public static void Caught(Exception exception, Level level, Logger logger) |
| { |
| Caught(exception, level, string.Empty, logger); |
| } |
| |
| /// <summary> |
| /// Call this method every time when an exception is caught. |
| /// </summary> |
| /// <remarks> |
| /// Calling this method will trace the exception and do other common processing. |
| /// This method traces the exception type and message at error level and the full |
| /// stack trace at all other levels. |
| /// </remarks> |
| /// <example> |
| /// try |
| /// { |
| /// // Some code that can throw |
| /// } |
| /// catch (Exception e) |
| /// { |
| /// Exceptions.Caught(e); |
| /// // Exception handling code |
| /// } |
| /// </example> |
| /// <param name="exception">The exception being caught.</param> |
| /// <param name="level">The log level.</param> |
| /// <param name="message">The additional message to log.</param> |
| /// <param name="logger">The Logger from the caller class.</param> |
| public static void Caught(Exception exception, Level level, string message, Logger logger) |
| { |
| string logMessage = string.Concat(DiagnosticsMessages.ExceptionCaught, " ", exception.GetType().Name, " ", message); |
| if (logger == null) |
| { |
| Console.WriteLine("Exception caught before logger is initiated, error message: " + logMessage + exception.Message); |
| } |
| else |
| { |
| logger.Log(level, logMessage, exception); |
| } |
| } |
| |
| public static void CaughtAndThrow(Exception exception, Level level, Logger logger) |
| { |
| CaughtAndThrow(exception, level, string.Empty, logger); |
| } |
| |
| public static void CaughtAndThrow(Exception exception, Level level, string message, Logger logger) |
| { |
| string logMessage = string.Concat(DiagnosticsMessages.ExceptionCaught, " ", exception.GetType().Name, " ", message); |
| if (logger == null) |
| { |
| Console.WriteLine("Exception caught before logger is initiated, error message: " + logMessage + exception.Message); |
| } |
| else |
| { |
| logger.Log(level, logMessage, exception); |
| } |
| ExceptionDispatchInfo.Capture(exception).Throw(); |
| } |
| #endregion |
| } |
| } |