diff --git a/conf/log4j.properties b/conf/log4j.properties index a15d5750044..e527c9bb899 100644 --- a/conf/log4j.properties +++ b/conf/log4j.properties @@ -80,13 +80,16 @@ log4j.appender.NullAppender=org.apache.log4j.varia.NullAppender # # console -# Add "console" to rootlogger above if you want to use this +# Add "console" to rootlogger above if you want to use this # log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.err log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n +log4j.appender.asyncconsole=org.apache.hadoop.hbase.AsyncConsoleAppender +log4j.appender.asyncconsole.target=System.err + # Custom Logging levels log4j.logger.org.apache.zookeeper=INFO diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/AsyncConsoleAppender.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/AsyncConsoleAppender.java new file mode 100644 index 00000000000..338265dd42c --- /dev/null +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/AsyncConsoleAppender.java @@ -0,0 +1,48 @@ +/** + * 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. + */ +package org.apache.hadoop.hbase; + +import org.apache.hadoop.hbase.classification.InterfaceAudience; +import org.apache.log4j.AsyncAppender; +import org.apache.log4j.ConsoleAppender; +import org.apache.log4j.PatternLayout; + +/** + * Logger class that buffers before trying to log to the specified console. + */ +@InterfaceAudience.Private +public class AsyncConsoleAppender extends AsyncAppender { + private final ConsoleAppender consoleAppender; + + public AsyncConsoleAppender() { + super(); + consoleAppender = new ConsoleAppender(new PatternLayout( + "%d{ISO8601} %-5p [%t] %c{2}: %m%n")); + this.addAppender(consoleAppender); + } + + public void setTarget(String value) { + consoleAppender.setTarget(value); + } + + public void activateOptions() { + consoleAppender.activateOptions(); + super.activateOptions(); + } + +}