diff options
| -rw-r--r-- | python/astra/__init__.py | 1 | ||||
| -rw-r--r-- | python/astra/log.py | 153 | ||||
| -rw-r--r-- | python/astra/log_c.pyx | 96 | 
3 files changed, 250 insertions, 0 deletions
| diff --git a/python/astra/__init__.py b/python/astra/__init__.py index a61aafc..1d3176c 100644 --- a/python/astra/__init__.py +++ b/python/astra/__init__.py @@ -34,6 +34,7 @@ from . import data3d  from . import algorithm  from . import projector  from . import matrix +from . import log  import os  try: diff --git a/python/astra/log.py b/python/astra/log.py new file mode 100644 index 0000000..3ec0df5 --- /dev/null +++ b/python/astra/log.py @@ -0,0 +1,153 @@ +#----------------------------------------------------------------------- +#Copyright 2013 Centrum Wiskunde & Informatica, Amsterdam +# +#Author: Daniel M. Pelt +#Contact: D.M.Pelt@cwi.nl +#Website: http://dmpelt.github.io/pyastratoolbox/ +# +# +#This file is part of the Python interface to the +#All Scale Tomographic Reconstruction Antwerp Toolbox ("ASTRA Toolbox"). +# +#The Python interface to the ASTRA Toolbox is free software: you can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation, either version 3 of the License, or +#(at your option) any later version. +# +#The Python interface to the ASTRA Toolbox is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#GNU General Public License for more details. +# +#You should have received a copy of the GNU General Public License +#along with the Python interface to the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. +# +#----------------------------------------------------------------------- + +from . import log_c as l + +import inspect + +def debug(message): +    """Log a debug message. +     +    :param message: Message to log. +    :type message: :class:`string` +    """ +    prev_f = inspect.getframeinfo(inspect.currentframe().f_back) +    l.log_debug(prev_f.filename,prev_f.lineno,message) + +def info(message): +    """Log an info message. +     +    :param message: Message to log. +    :type message: :class:`string` +    """ +    prev_f = inspect.getframeinfo(inspect.currentframe().f_back) +    l.log_info(prev_f.filename,prev_f.lineno,message) + +def warn(message): +    """Log a warning message. +     +    :param message: Message to log. +    :type message: :class:`string` +    """ +    prev_f = inspect.getframeinfo(inspect.currentframe().f_back) +    l.log_warn(prev_f.filename,prev_f.lineno,message) + +def error(message): +    """Log an error message. +     +    :param message: Message to log. +    :type message: :class:`string` +    """ +    prev_f = inspect.getframeinfo(inspect.currentframe().f_back) +    l.log_error(prev_f.filename,prev_f.lineno,message) + +def enable(): +    """Enable logging to screen and file.""" +    l.log_enable() + +def enableScreen(): +    """Enable logging to screen.""" +    l.log_enableScreen() + +def enableFile(): +    """Enable logging to file (note that a file has to be set).""" +    l.log_enableFile() + +def disable(): +    """Disable all logging.""" +    l.log_disable() + +def disableScreen(): +    """Disable logging to screen.""" +    l.log_disableScreen() + +def disableFile(): +    """Disable logging to file.""" +    l.log_disableFile() + +def setFormatFile(fmt): +    """Set the format string for log messages.  Here are the substitutions you may use: +     +    %f: Source file name generating the log call. +    %n: Source line number where the log call was made. +    %m: The message text sent to the logger (after printf formatting). +    %d: The current date, formatted using the logger's date format. +    %t: The current time, formatted using the logger's time format. +    %l: The log level (one of "DEBUG", "INFO", "WARN", or "ERROR"). +    %%: A literal percent sign. +     +    The default format string is "%d %t %f(%n): %l: %m\n". +     +    :param fmt: Format to use, end with "\n". +    :type fmt: :class:`string` +    """ +    l.log_setFormatFile(fmt) + +def setFormatScreen(fmt): +    """Set the format string for log messages.  Here are the substitutions you may use: +     +    %f: Source file name generating the log call. +    %n: Source line number where the log call was made. +    %m: The message text sent to the logger (after printf formatting). +    %d: The current date, formatted using the logger's date format. +    %t: The current time, formatted using the logger's time format. +    %l: The log level (one of "DEBUG", "INFO", "WARN", or "ERROR"). +    %%: A literal percent sign. +     +    The default format string is "%d %t %f(%n): %l: %m\n". +     +    :param fmt: Format to use, end with "\n". +    :type fmt: :class:`string` +    """ +    l.log_setFormatScreen(fmt) + +STDOUT=1 +STDERR=2 + +DEBUG=0 +INFO=1 +WARN=2 +ERROR=3 + +def setOutputScreen(fd, level): +    """Set which screen to output to, and which level to use. +     +    :param fd: File descriptor of output screen (STDOUT or STDERR). +    :type fd: :class:`int` +    :param level: Logging level to use (DEBUG, INFO, WARN, or ERROR). +    :type level: :class:`int` +    """ +    l.log_setOutputScreen(fd, level) + +def setOutputFile(filename, level): +    """Set which file to output to, and which level to use. +     +    :param filename: File name of output file. +    :type filename: :class:`string` +    :param level: Logging level to use (DEBUG, INFO, WARN, or ERROR). +    :type level: :class:`int` +    """ +    l.log_setOutputFile(filename, level)
\ No newline at end of file diff --git a/python/astra/log_c.pyx b/python/astra/log_c.pyx new file mode 100644 index 0000000..969cc06 --- /dev/null +++ b/python/astra/log_c.pyx @@ -0,0 +1,96 @@ +#----------------------------------------------------------------------- +#Copyright 2013 Centrum Wiskunde & Informatica, Amsterdam +# +#Author: Daniel M. Pelt +#Contact: D.M.Pelt@cwi.nl +#Website: http://dmpelt.github.io/pyastratoolbox/ +# +# +#This file is part of the Python interface to the +#All Scale Tomographic Reconstruction Antwerp Toolbox ("ASTRA Toolbox"). +# +#The Python interface to the ASTRA Toolbox is free software: you can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation, either version 3 of the License, or +#(at your option) any later version. +# +#The Python interface to the ASTRA Toolbox is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#GNU General Public License for more details. +# +#You should have received a copy of the GNU General Public License +#along with the Python interface to the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. +# +#----------------------------------------------------------------------- +# distutils: language = c++ +# distutils: libraries = astra + +import six + +cdef extern from "astra/Logging.h" namespace "astra": +    cdef enum log_level: +        LOG_DEBUG +        LOG_INFO +        LOG_WARN +        LOG_ERROR + +cdef extern from "astra/Logging.h" namespace "astra::CLogger": +    void debug(const char *sfile, int sline, const char *fmt, ...) +    void info(const char *sfile, int sline, const char *fmt, ...) +    void warn(const char *sfile, int sline, const char *fmt, ...) +    void error(const char *sfile, int sline, const char *fmt, ...) +    void setOutputScreen(int fd, log_level m_eLevel) +    void setOutputFile(const char *filename, log_level m_eLevel) +    void enable() +    void enableScreen() +    void enableFile() +    void disable() +    void disableScreen() +    void disableFile() +    void setFormatFile(const char *fmt) +    void setFormatScreen(const char *fmt) + +def log_debug(sfile, sline, message): +    debug(six.b(sfile),sline,six.b(message)) + +def log_info(sfile, sline, message): +    info(six.b(sfile),sline,six.b(message)) + +def log_warn(sfile, sline, message): +    warn(six.b(sfile),sline,six.b(message)) + +def log_error(sfile, sline, message): +    error(six.b(sfile),sline,six.b(message)) + +def log_enable(): +    enable() + +def log_enableScreen(): +    enableScreen() + +def log_enableFile(): +    enableFile() + +def log_disable(): +    disable() + +def log_disableScreen(): +    disableScreen() + +def log_disableFile(): +    disableFile() + +def log_setFormatFile(fmt): +    setFormatFile(six.b(fmt)) + +def log_setFormatScreen(fmt): +    setFormatScreen(six.b(fmt)) + +enumList = [LOG_DEBUG,LOG_INFO,LOG_WARN,LOG_ERROR] + +def log_setOutputScreen(fd, level): +    setOutputScreen(fd, enumList[level]) + +def log_setOutputFile(filename, level): +    setOutputFile(six.b(filename), enumList[level])
\ No newline at end of file | 
