001
014
015 package com.liferay.util.sl4fj;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019
020 import java.util.HashMap;
021 import java.util.Map;
022 import java.util.concurrent.locks.Lock;
023 import java.util.concurrent.locks.ReadWriteLock;
024 import java.util.concurrent.locks.ReentrantReadWriteLock;
025
026 import org.slf4j.ILoggerFactory;
027 import org.slf4j.Logger;
028
029
032 public class LiferayLoggerFactory implements ILoggerFactory {
033
034 public LiferayLoggerFactory() {
035 ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
036
037 _readLock = readWriteLock.readLock();
038 _writeLock = readWriteLock.writeLock();
039 }
040
041 public Logger getLogger(String name) {
042 Logger logger = null;
043
044 _readLock.lock();
045
046 try {
047 logger = _loggers.get(name);
048 }
049 finally {
050 _readLock.unlock();
051 }
052
053 if (logger == null) {
054 _writeLock.lock();
055
056 try {
057 Log log = LogFactoryUtil.getLog(name);
058
059 logger = new LiferayLoggerAdapter(log);
060
061 _loggers.put(name, logger);
062 }
063 finally {
064 _writeLock.unlock();
065 }
066
067 }
068
069 return logger;
070 }
071
072 private Map<String, Logger> _loggers = new HashMap<String, Logger>();
073 private Lock _readLock;
074 private Lock _writeLock;
075
076 }