blob: 7ef31c42c9101abeb80c54e747c69e7e640c3969 [file] [log] [blame]
/*
* 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.
*/
#ifndef _LOGGER_H
#define _LOGGER_H
#include <assert.h>
#include <stdio.h>
#include <apr_pools.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* Header format mask.
*/
typedef int LogFormat;
/**
* Formats.
*/
#define LOG_EMPTY 0
#define LOG_TIMESTAMP 1
#define LOG_FILELINE 2
#define LOG_CATEGORY 4
#define LOG_THREAD_ID 8
#define LOG_FUNCTION 16
#define LOG_WARN 32
/**
* Predefined classloader filter.
*/
#define LOG_CLASS_INFO "class"
/**
* Predefined gc filter.
*/
#define LOG_GC_INFO "gc"
/**
* Predefined jni filter.
*/
#define LOG_JNI_INFO "jni"
/**
* A domain, which is enabled by default.
*/
#define LOG_INFO "info"
typedef enum {
LOG_DISABLED = 0,
LOG_ENABLED,
LOG_UNKNOWN
} LogState;
struct LogSite {
LogState state;
struct LogSite *next;
char* log_domain;
};
/**
* Adds and enables an info category to log.
* @param category a category name
* @param copy true if the name should be stored internally
* @return true on success, false if the category already exists
* and is enabled, or the logger pool is not set.
*/
int log_enable_info_category(const char* category, int copy);
/**
* Adds and enables a trace category to log.
* @param category a category name
* @param copy true if the name should be stored internally
* @return true on success, false if the category already exists
* and is enabled, or the logger pool is not set.
*/
int log_enable_trace_category(const char* category, int copy);
/**
* Adds and disables a given info category.
* @param category a category name
* @param copy true if the name should be stored internally
* @return true on success, false if the category already exists
* and is disabled, or the logger pool is not set.
*/
int log_disable_info_category(const char* category, int copy);
/**
* Adds and disables a given trace category.
* @param category a category name
* @param copy true if the name should be stored internally
* @return true on success, false if the category already exists
* and is disabled, or the logger pool is not set.
*/
int log_disable_trace_category(const char* category, int copy);
/**
* Inits log system. Allows further dynamic configuration of categories.
*/
void log_init(apr_pool_t* parent_pool);
/**
* Frees dynamic memory associated with the logger.
*/
void log_shutdown();
/**
* A native porting layer.
*/
struct HyPortLibrary;
/**
* Sets a porting library for log system localization.
*/
void log_set_portlib(struct HyPortLibrary* portlib);
/**
* Gets a porting library for log system localization.
*/
struct HyPortLibrary* log_get_portlib();
/**
* Sets a <code>vfprintf</code> hook.
*/
void log_set_vfprintf(void* p_vfprintf);
/**
* Sets a <code>exit</code> hook.
*/
void log_set_exit(void* p_exit);
/**
* Sets a <code>abort</code> hook.
*/
void log_set_abort(void* p_abort);
/**
* Sets the header format for the logger.
*/
void log_set_header_format(LogFormat format);
/**
* Redirects output to a file.
*/
void log_set_out(FILE* file);
/**
* Terminates the program using specified return code.
*/
APR_DECLARE(void) log_exit(int code);
/**
* Terminates the program abnormally.
*/
APR_DECLARE(void) log_abort();
/**
* Writes formatted data to stdout via specified vfprinf function.
*/
APR_DECLARE_NONSTD(int) log_printf(const char* format, ...);
/**
* Writes formatted header to stdout via specified vfprinf function.
*/
APR_DECLARE(void) log_header(const char* category, const char* file_line, const char* function_name);
/**
* Checks if the warnings are enabled.
*/
APR_DECLARE(LogState) log_is_warn_enabled();
/**
* Checks if the info domain is enabled for the given category.
*/
APR_DECLARE(LogState) log_is_info_enabled(const char *category);
/**
* Checks if the trace is enabled for the given category.
*/
APR_DECLARE(LogState) log_is_trace_enabled(const char *category);
/**
* Caches a check in the corresponding log site.
* @return enabled
*/
APR_DECLARE(LogState) log_cache(LogState enabled, struct LogSite* p_log_site);
#ifdef __cplusplus
}
#endif
#endif /* _LOGGER_H */