# Poco

# class Channel

Library: Foundation
Package: Logging
Header: Poco/Channel.h

## Description

The base class for all Channel classes.

Supports reference counting based garbage collection and provides trivial implementations of getProperty() and setProperty().

## Inheritance

Direct Base Classes: Configurable, RefCountedObject

All Base Classes: Configurable, RefCountedObject

Known Derived Classes: Poco::Data::SQLChannel, AsyncChannel, ConsoleChannel, ColorConsoleChannel, EventChannel, EventLogChannel, FastLogger, FileChannel, FormattingChannel, Logger, NullChannel, SimpleFileChannel, SplitterChannel, StreamChannel, SyslogChannel, WindowsConsoleChannel, WindowsColorConsoleChannel, Poco::Net::RemoteSyslogChannel, Poco::Net::RemoteSyslogListener, Poco::Net::SMTPChannel

## Member Summary

Member Functions: close, getProperty, log, open, setProperty

Inherited Functions: duplicate, getProperty, referenceCount, release, setProperty

## Types Aliases

### Ptr

using Ptr = AutoPtr < Channel >;

## Constructors

### Channel

Channel();

Creates the channel and initializes the reference count to one.

## Destructor

### ~Channel

~Channel() override;

## Member Functions

### close

virtual void close();

Does whatever is necessary to close the channel. The default implementation does nothing.

### getProperty

std::string getProperty(
const std::string & name
) const override;

Throws a PropertyNotSupportedException.

See also: Poco::Configurable::getProperty()

### log

virtual void log(
const Message & msg
) = 0;

Logs the given message to the channel. Must be overridden by subclasses.

If the channel has not been opened yet, the log() method will open it.

### log

virtual void log(
Message && msg
);

Logs the given message to the channel by moving it.

This overload allows channels that need to store or queue messages (such as AsyncChannel) to avoid copying the message.

The default implementation simply calls log(const Message&), which is appropriate for channels that immediately process and discard the message (e.g., ConsoleChannel, FileChannel).

Subclasses that buffer or queue messages should override this method to take advantage of move semantics.

### open

virtual void open();

Does whatever is necessary to open the channel. The default implementation does nothing.

### setProperty

void setProperty(
const std::string & name,
const std::string & value
) override;

Throws a PropertyNotSupportedException.

See also: Poco::Configurable::setProperty()