diff options
| author | Robert Godfrey <rgodfrey@apache.org> | 2014-11-21 00:26:48 +0000 |
|---|---|---|
| committer | Robert Godfrey <rgodfrey@apache.org> | 2014-11-21 00:26:48 +0000 |
| commit | 5110a6f09a5e8a0d5ebaabce9fdb8b52ba0940cd (patch) | |
| tree | 8510340b5561e660aa572a63c269a22e06187a0e /qpid/java/bdbstore/src | |
| parent | 897fad08d8eb23c002a14760749ae74e6dfdb73f (diff) | |
| download | qpid-python-5110a6f09a5e8a0d5ebaabce9fdb8b52ba0940cd.tar.gz | |
QPID-6239 : [Java Broker] redirect embedded database error logs to common broker log file
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1640841 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/bdbstore/src')
3 files changed, 153 insertions, 3 deletions
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java index b95891d575..f3a06db89c 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java @@ -39,6 +39,7 @@ import org.apache.log4j.Logger; import org.apache.qpid.server.store.StoreException; import org.apache.qpid.server.store.StoreFuture; +import org.apache.qpid.server.store.berkeleydb.logging.Log4jLoggingHandler; public class StandardEnvironmentFacade implements EnvironmentFacade { @@ -76,6 +77,10 @@ public class StandardEnvironmentFacade implements EnvironmentFacade envConfig.setAllowCreate(true); envConfig.setTransactional(true); + envConfig.setConfigParam(EnvironmentConfig.FILE_LOGGING_LEVEL, "OFF"); + envConfig.setConfigParam(EnvironmentConfig.CONSOLE_LOGGING_LEVEL, "OFF"); + envConfig.setLoggingHandler(new Log4jLoggingHandler("["+configuration.getName()+"]")); + Map<String, String> params = new HashMap<>(EnvironmentFacade.ENVCONFIG_DEFAULTS); params.putAll(configuration.getParameters()); @@ -95,6 +100,7 @@ public class StandardEnvironmentFacade implements EnvironmentFacade envConfig.setExceptionListener(new LoggingAsyncExceptionListener()); EnvHomeRegistry.getInstance().registerHome(_environmentPath); + boolean success = false; try { diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/logging/Log4jLoggingHandler.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/logging/Log4jLoggingHandler.java new file mode 100644 index 0000000000..0aec43e4ad --- /dev/null +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/logging/Log4jLoggingHandler.java @@ -0,0 +1,139 @@ +/* + * + * 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.qpid.server.store.berkeleydb.logging; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.ErrorManager; +import java.util.logging.Formatter; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.LogRecord; + + +public class Log4jLoggingHandler extends Handler +{ + public Log4jLoggingHandler(final String prefix) + { + setFormatter(new Formatter() + { + @Override + public String format(final LogRecord record) + { + return prefix + " " + formatMessage(record); + } + }); + } + + private static final Map<Level, org.apache.log4j.Level> LEVEL_MAP; + static + { + Map<Level, org.apache.log4j.Level> map = new HashMap<>(); + map.put(Level.SEVERE, org.apache.log4j.Level.ERROR); + map.put(Level.WARNING, org.apache.log4j.Level.WARN); + //Note that INFO comes out at DEBUG level as the BDB logging at INFO seems to be more of a DEBUG nature + map.put(Level.INFO, org.apache.log4j.Level.DEBUG); + map.put(Level.CONFIG, org.apache.log4j.Level.DEBUG); + map.put(Level.FINE, org.apache.log4j.Level.TRACE); + map.put(Level.FINER, org.apache.log4j.Level.TRACE); + map.put(Level.FINEST, org.apache.log4j.Level.TRACE); + map.put(Level.ALL, org.apache.log4j.Level.TRACE); + + LEVEL_MAP = Collections.unmodifiableMap(map); + } + + private static final org.apache.log4j.Logger BDB_LOGGER = org.apache.log4j.Logger.getLogger("BDB"); + + + @Override + public void publish(final LogRecord record) + { + org.apache.log4j.Level level = convertLevel(record.getLevel()); + if (BDB_LOGGER.isEnabledFor(level)) + { + + Formatter formatter = getFormatter(); + + try + { + String message = formatter.format(record); + try + { + BDB_LOGGER.log(level, message); + } + catch (RuntimeException e) + { + reportError(null, e, ErrorManager.WRITE_FAILURE); + } + } + catch (RuntimeException e) + { + reportError(null, e, ErrorManager.FORMAT_FAILURE); + } + } + } + + @Override + public boolean isLoggable(final LogRecord record) + { + return BDB_LOGGER.isEnabledFor(convertLevel(record.getLevel())); + } + + private org.apache.log4j.Level convertLevel(final Level level) + { + //Note that INFO comes out at DEBUG level as the BDB logging at INFO seems to be more of a DEBUG nature + org.apache.log4j.Level result = LEVEL_MAP.get(level); + if(result == null) + { + if (level.intValue() >= Level.SEVERE.intValue()) + { + result = org.apache.log4j.Level.ERROR; + } + else if (level.intValue() >= Level.WARNING.intValue()) + { + result = org.apache.log4j.Level.WARN; + } + else if (level.intValue() >= Level.CONFIG.intValue()) + { + result = org.apache.log4j.Level.DEBUG; + } + else + { + result = org.apache.log4j.Level.TRACE; + } + } + + return result; + } + + @Override + public void flush() + { + + } + + @Override + public void close() throws SecurityException + { + + } +} diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java index 52a7e28f31..c1c06988a3 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java @@ -69,18 +69,19 @@ import com.sleepycat.je.rep.vlsn.VLSNRange; import com.sleepycat.je.utilint.PropUtil; import com.sleepycat.je.utilint.VLSN; import org.apache.log4j.Logger; -import org.apache.qpid.server.store.StoreException; -import org.apache.qpid.server.store.berkeleydb.BDBUtils; -import org.apache.qpid.server.util.ServerScopedRuntimeException; import org.codehaus.jackson.map.ObjectMapper; import org.apache.qpid.server.configuration.IllegalConfigurationException; +import org.apache.qpid.server.store.StoreException; import org.apache.qpid.server.store.StoreFuture; +import org.apache.qpid.server.store.berkeleydb.BDBUtils; import org.apache.qpid.server.store.berkeleydb.CoalescingCommiter; import org.apache.qpid.server.store.berkeleydb.EnvHomeRegistry; import org.apache.qpid.server.store.berkeleydb.EnvironmentFacade; +import org.apache.qpid.server.store.berkeleydb.logging.Log4jLoggingHandler; import org.apache.qpid.server.util.ConnectionScopedRuntimeException; import org.apache.qpid.server.util.DaemonThreadFactory; +import org.apache.qpid.server.util.ServerScopedRuntimeException; public class ReplicatedEnvironmentFacade implements EnvironmentFacade, StateChangeListener { @@ -1116,6 +1117,10 @@ public class ReplicatedEnvironmentFacade implements EnvironmentFacade, StateChan envConfig.setExceptionListener(new ExceptionListener()); envConfig.setDurability(_defaultDurability); + envConfig.setConfigParam(EnvironmentConfig.FILE_LOGGING_LEVEL, "OFF"); + envConfig.setConfigParam(EnvironmentConfig.CONSOLE_LOGGING_LEVEL, "OFF"); + envConfig.setLoggingHandler(new Log4jLoggingHandler("[" + _configuration.getName() + "]")); + for (Map.Entry<String, String> configItem : environmentParameters.entrySet()) { if (LOGGER.isInfoEnabled()) |
