/* * Strongback * Copyright 2015, Strongback and individual contributors by the @authors tag. * See the COPYRIGHT.txt in the distribution for a full listing of individual * contributors. * * Licensed under the MIT License; you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://opensource.org/licenses/MIT * 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. */ package org.strongback; import org.strongback.annotation.ThreadSafe; /** * A {@link Logger} implementation that sends messages to {@link System#out} and {@link System#err}. * * @author Randall Hauch */ @ThreadSafe final class SystemLogger implements Logger { private static final int ERROR = 2 << 0; private static final int WARN = 2 << 1; private static final int INFO = 2 << 2; private static final int DEBUG = 2 << 3; private static final int TRACE = 2 << 4; private volatile int level = INFO | WARN | ERROR; @Override public void error(Throwable t) { if ((level & ERROR) == ERROR) t.printStackTrace(); } @Override public void error(String message) { if ((level & ERROR) == ERROR) message("ERROR", message); } @Override public void error(Throwable t, String message) { if ((level & ERROR) == ERROR) { message("ERROR", message); t.printStackTrace(); } } @Override public void warn(String message) { if ((level & WARN) == WARN) message("WARN", message); } @Override public void info(String message) { if ((level & INFO) == INFO) message("INFO", message); } @Override public void debug(String message) { if ((level & DEBUG) == DEBUG) message("DEBUG", message); } @Override public void trace(String message) { if ((level & TRACE) == TRACE) message("TRACE", message); } private void message(String level, String message) { System.out.println(level + " " + message); } public SystemLogger enable(Level level) { switch (level) { case TRACE: this.level = TRACE | DEBUG | INFO | WARN | ERROR; break; case DEBUG: this.level = DEBUG | INFO | WARN | ERROR; break; case INFO: this.level = INFO | WARN | ERROR; break; case WARN: this.level = WARN | ERROR; break; case ERROR: this.level = ERROR; break; } return this; } }