Skip to content

Commit

Permalink
Merge remote branch 'spencertipping/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
robey committed Apr 26, 2010
2 parents 9f7c691 + c373c70 commit 63f25ae
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 8 deletions.
29 changes: 21 additions & 8 deletions src/main/scala/net/lag/logging/Syslog.scala
Expand Up @@ -16,6 +16,9 @@

package net.lag.logging

import scala.actors.Actor._
import scala.actors._

import java.util.{logging => javalog}
import java.net.{DatagramPacket, DatagramSocket, InetAddress, InetSocketAddress, SocketAddress}
import java.text.SimpleDateFormat
Expand Down Expand Up @@ -129,14 +132,24 @@ class SyslogHandler(useIsoDateFormat: Boolean, server: String) extends Handler(n

def clearServerName = formatter.clearServerName

def publish(record: javalog.LogRecord) = synchronized {
try {
val data = getFormatter.format(record).getBytes
val packet = new DatagramPacket(data, data.length, dest)
socket.send(packet)
} catch {
case e =>
System.err.println(Formatter.formatStackTrace(e, 30).mkString("\n"))
def publish(record: javalog.LogRecord) = {
val data = formatter.format(record).getBytes
val packet = new DatagramPacket(data, data.length, dest)
NonBlockingSyslog.send (() => socket.send(packet))
}
}

object NonBlockingSyslog {
def send (action: () => Unit) = writer ! action
def block = writer !? Wait

private case object Wait

private lazy val writer = actor {
while (true) receive {
case Wait => reply (())
case action: (() => Unit) => try {action ()}
catch {case e => System.err.println(Formatter.formatStackTrace(e, 30).mkString("\n"))}
}
}
}
3 changes: 3 additions & 0 deletions src/test/scala/net/lag/logging/LoggingSpec.scala
Expand Up @@ -345,6 +345,8 @@ object LoggingSpec extends Specification with TestHelper {
syslog.clearServerName
log.debug("and debug!")

NonBlockingSyslog.block

val p = new DatagramPacket(new Array[Byte](1024), 1024)
serverSocket.receive(p)
new String(p.getData, 0, p.getLength) mustEqual "<9>2008-03-29T05:53:16 raccoon.local whiskey: fatal message!"
Expand All @@ -360,6 +362,7 @@ object LoggingSpec extends Specification with TestHelper {
log.addHandler(syslog)
log.info("here's an info message with BSD time.")
serverSocket.receive(p)
NonBlockingSyslog.block
new String(p.getData, 0, p.getLength) mustEqual "<14>Mar 29 05:53:16 raccoon.local whiskey: here's an info message with BSD time."
}

Expand Down

0 comments on commit 63f25ae

Please sign in to comment.