| .. Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| .. include:: ../../../common.defs |
| .. default-domain:: cpp |
| |
| .. _developer-plugins-management-logging-api: |
| |
| Logging API |
| *********** |
| |
| The logging API enables your plugin to log entries in a custom text log |
| file that you create with the call :func:`TSTextLogObjectCreate`. This log |
| file is part of Traffic Server's logging system; by default, it is |
| stored in the logging directory. Once you have created the log object, |
| you can set log properties. |
| |
| The logging API enables you to: |
| |
| - Establish a custom text log for your plugin: see |
| :func:`TSTextLogObjectCreate` |
| |
| - Set the log header for your custom text log: see |
| :func:`TSTextLogObjectHeaderSet` |
| |
| - Enable or disable rolling your custom text log: see |
| :func:`TSTextLogObjectRollingEnabledSet` |
| |
| - Set the rolling interval (in seconds) for your custom text log: see |
| :func:`TSTextLogObjectRollingIntervalSecSet` |
| |
| - Set the rolling offset for your custom text log: see |
| :func:`TSTextLogObjectRollingOffsetHrSet` |
| |
| - Set the rolling size for your custom text log: see |
| :func:`TSTextLogObjectRollingSizeMbSet` |
| |
| - Write text entries to the custom text log: see |
| :func:`TSTextLogObjectWrite` |
| |
| - Flush the contents of the custom text log's write buffer to disk: see |
| :func:`TSTextLogObjectFlush` |
| |
| - Destroy custom text logs when you are done with them: see |
| :func:`TSTextLogObjectDestroy` |
| |
| The steps below show how the logging API is used in the |
| ``denylist_1.cc`` sample plugin. For the complete source code, see the |
| :ref:`developer-plugins-examples-denylist-code` section. |
| |
| #. A new log file is defined as a global variable. |
| |
| .. code-block:: c |
| |
| static TSTextLogObject ts_log; |
| |
| #. In ``TSPluginInit``, a new log object is allocated: |
| |
| .. code-block:: c |
| |
| TSReturnCode error = TSTextLogObjectCreate("denylist", |
| TS_LOG_MODE_ADD_TIMESTAMP, &ts_log); |
| |
| The new log is named ``denylist.log``. Each entry written to the log |
| will have a timestamp. The ``nullptr`` argument specifies that the new |
| log does not have a log header. The error argument stores the result |
| of the log creation; if the log is created successfully, then an |
| error will be equal to ``TS_LOG_ERROR_NO_ERROR``. |
| |
| #. After creating the log, the plugin makes sure that the log was |
| created successfully: |
| |
| .. code-block:: c |
| |
| if (error != TS_SUCCESS) { |
| printf("denylist plugin: error %d while creating log\n", error); |
| } |
| |
| #. The :ref:`developer-plugins-examples-denylist` matches the host portion of |
| the URL (in each client request) with a list of denylisted sites (stored in |
| the array ``sites[]``): |
| |
| .. code-block:: c |
| |
| for (i = 0; i < nsites; i++) { |
| if (strncmp (host, sites[i], host_length) == 0) { |
| /* ... */ |
| } |
| } |
| |
| If the host matches one of the denylisted |
| sites (such as ``sites[i]``), then the plugin writes a denylist |
| entry to ``denylist.log``: |
| |
| .. code-block:: c |
| |
| if (log) { TSTextLogObjectWrite(log, "denylisting site: %s", |
| sites[i]); |
| |
| The format of the log entry is as follows: |
| |
| :: |
| |
| denylisting site: sites[i] |
| |
| The log is not flushed or |
| destroyed in the ``denylist_1`` plugin - it lives for the life of |
| the plugin. |
| |
| |