Something like this? Seems not too expensive, as long as $persistId is not null only a single connection is created..
I'm not sure how to unit test this though ;)

    /**
     * @param string $dsn       DSN to the endpoint
     * @param mixed  $type      ZMQ::SOCKET_ constant
     * @param mixed  $persistId String for persistent connections, null to disable persistent connections
     * @param int    $level     The minimum logging level at which this handler will be triggered
     * @param bool   $bubble    Whether the messages that are handled can bubble up the stack or not
     */
    public function __construct($dsn, $type = ZMQ::SOCKET_PUSH, $persistId = 'monolog', $level = Logger::DEBUG, $bubble = true)
    {
        $this->dsn = $dsn;
        $this->type = $type;
        $this->persistId = $persistId;

        parent::__construct($level, $bubble);
    }

    /**
     * {@inheritDoc}
     */
    protected function write(array $record)
    {
        $context = new ZMQContext();

        $socket = $context->getSocket($this->type, $this->persistId);

        $socket->connect($this->dsn);

        $socket->send($record['formatted'], ZMQ::MODE_NOBLOCK);
    }

Any thoughts?