Index: src/java/com/sun/enterprise/server/logging/SystemLogHandler.java =================================================================== RCS file: /cvs/glassfish/appserv-core/src/java/com/sun/enterprise/server/logging/SystemLogHandler.java,v retrieving revision 1.4 diff -u -r1.4 SystemLogHandler.java --- src/java/com/sun/enterprise/server/logging/SystemLogHandler.java 5 May 2007 05:35:44 -0000 1.4 +++ src/java/com/sun/enterprise/server/logging/SystemLogHandler.java 11 Oct 2008 04:42:28 -0000 @@ -85,6 +85,12 @@ public void close( ) { } public void flush( ) { } + + public synchronized void syslog(String fac, String level, String message) { + syslogMessage(fac, level, message); + } + + private native void syslogMessage(String fac, String level, String message); } Index: src/java/com/sun/enterprise/web/PEAccessLogValve.java =================================================================== RCS file: /cvs/glassfish/appserv-core/src/java/com/sun/enterprise/web/PEAccessLogValve.java,v retrieving revision 1.30.2.1 diff -u -r1.30.2.1 PEAccessLogValve.java --- src/java/com/sun/enterprise/web/PEAccessLogValve.java 16 Sep 2008 20:48:53 -0000 1.30.2.1 +++ src/java/com/sun/enterprise/web/PEAccessLogValve.java 11 Oct 2008 04:42:28 -0000 @@ -78,6 +78,7 @@ import com.sun.enterprise.config.serverbeans.HttpProtocol; import com.sun.enterprise.config.serverbeans.HttpService; import com.sun.enterprise.instance.InstanceEnvironment; +import com.sun.enterprise.server.logging.SystemLogHandler; import com.sun.enterprise.server.pluggable.WebContainerFeatureFactory; import com.sun.logging.LogDomains; @@ -224,7 +225,12 @@ */ protected FileChannel fileChannel; - + /** + * The SystemLogHandler when we logto syslogd. + */ + protected SystemLogHandler sysLogHandler = null; + protected String sysLogFacility = null; + /** * The stream used to store the logs. */ @@ -685,11 +691,18 @@ synchronized(lock){ try{ charBuffer.flip(); - ByteBuffer byteBuffer = - ByteBuffer.wrap(charBuffer.toString().getBytes()); - while (byteBuffer.hasRemaining()){ - fileChannel.write(byteBuffer); + + if (sysLogHandler != null) { + sysLogHandler.syslog(sysLogFacility, "LOG_INFO", charBuffer.toString()); + } + else { + ByteBuffer byteBuffer = + ByteBuffer.wrap(charBuffer.toString().getBytes()); + while (byteBuffer.hasRemaining()){ + fileChannel.write(byteBuffer); + } } + charBuffer.clear(); } catch (IOException ex){ ; @@ -770,28 +783,42 @@ return false; } - File dir = new File(accessLog); - if (!dir.isAbsolute()) { - /* - * If accesslog is relative, turn it into an absolute path by - * prepending log-root of domain element - */ - String logRoot = domain.getLogRoot(); - if (logRoot != null) { - dir = new File(logRoot, accessLog); - } else { - dir = new File(instance.getInstancesRoot(), accessLog); + if (accessLog.indexOf("::") == 0) { + sysLogFacility = accessLog.substring(2); + + if (_logger.isLoggable(Level.FINE)) { + _logger.log(Level.FINE, + "Setting accesslog for virtual " + + "server '" + vsId + "' to syslogd facility " + + sysLogFacility); } } + else { + sysLogFacility = null; + + File dir = new File(accessLog); + if (!dir.isAbsolute()) { + /* + * If accesslog is relative, turn it into an absolute path by + * prepending log-root of domain element + */ + String logRoot = domain.getLogRoot(); + if (logRoot != null) { + dir = new File(logRoot, accessLog); + } else { + dir = new File(instance.getInstancesRoot(), accessLog); + } + } - if (_logger.isLoggable(Level.FINE)) { - _logger.log(Level.FINE, - "Setting accesslog directory for virtual " - + "server '" + vsId + "' to " - + dir.getAbsolutePath()); - } + if (_logger.isLoggable(Level.FINE)) { + _logger.log(Level.FINE, + "Setting accesslog directory for virtual " + + "server '" + vsId + "' to " + + dir.getAbsolutePath()); + } - setDirectory(dir.getAbsolutePath()); + setDirectory(dir.getAbsolutePath()); + } // If the property is defined under virtual-server, override the one // defined under http-service. @@ -910,14 +937,15 @@ * Close the currently open log file (if any) */ private synchronized void close() { - - try{ - // Make sure the byteBuffer is clean - log(); - fileChannel.close(); - fos.close(); - } catch (IOException ex){ - ; + if (sysLogHandler == null) { + try{ + // Make sure the byteBuffer is clean + log(); + fileChannel.close(); + fos.close(); + } catch (IOException ex){ + ; + } } } @@ -932,6 +960,15 @@ */ private synchronized void open(String dateStamp, boolean firstAccessLogFile) { + if (sysLogFacility != null) { + if (sysLogHandler == null) { + sysLogHandler = new SystemLogHandler(); + } + + return; + } + + sysLogHandler = null; // Create the directory if necessary File dir = new File(directory);