diff -durN old/Loggers.py new/Loggers.py
--- old/Loggers.py	1970-01-01 03:00:00.000000000 +0300
+++ new/Loggers.py	2012-12-04 01:04:47.607661749 +0200
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+
+"""
+    Script for logging test.
+    2012.12.03: Created by: Konstantin M. <evilzluk@gmail.com>
+"""
+
+import Router
+
+"""
+    Module Properties:
+       Log Levels:
+           L_ALERT
+           L_BUG
+           L_CRIT2
+           L_CRIT
+           L_ERR
+           L_WARN
+           L_NOTICE
+           L_INFO
+           L_DBG
+
+       Log Facilities:
+           DEFAULT_FACILITY
+
+    Module Methods:
+       LM_GEN1(self, int log_level, str msg)
+       LM_GEN2(self, int log_facility, int log_level, str msg)
+       LM_ALERT(self, str msg)
+       LM_CRIT(self, str msg)
+       LM_ERR(self, str msg)
+       LM_WARN(self, str msg)
+       LM_NOTICE(self, str msg)
+       LM_INFO(self, str msg)
+       LM_DBG(self, str msg)
+
+
+"""
+
+class Loggers:
+
+    def __init__(self):
+	pass
+
+    def __del__(self):
+	pass
+
+    def child_init(self, y):
+	return 0
+
+    def TestLoggers(self, msg, args):
+	Router.LM_GEN1(Router.L_INFO,                           	"Loggers.py:     LM_GEN1: msg: %s" % str(args))
+	Router.LM_GEN2(Router.L_INFO, Router.DEFAULT_FACILITY,	        "Loggers.py:     LM_GEN2: msg: %s" % str(args))
+	Router.LM_ALERT(                                        	"Loggers.py:    LM_ALERT: msg: %s" % str(args))
+	Router.LM_CRIT(                                         	"Loggers.py:     LM_CRIT: msg: %s" % str(args))
+	Router.LM_ERR(                                          	"Loggers.py:      LM_ERR: msg: %s" % str(args))
+	Router.LM_WARN(                                         	"Loggers.py:     LM_WARN: msg: %s" % str(args))
+	Router.LM_NOTICE(                                       	"Loggers.py:   LM_NOTICE: msg: %s" % str(args))
+	Router.LM_INFO(                                         	"Loggers.py:     LM_INFO: msg: %s" % str(args))
+	Router.LM_DBG(                                          	"Loggers.py:      LM_DBG: msg: %s" % str(args))
+	return 1
+
+def mod_init():
+    return Loggers()
+
diff -durN old/python_iface.c new/python_iface.c
--- old/python_iface.c	2012-12-04 01:03:05.000000000 +0200
+++ new/python_iface.c	2012-12-04 01:03:53.000000000 +0200
@@ -27,9 +27,111 @@
 #include "../../route_struct.h"
 #include "python_exec.h"
 
-/* Return the number of arguments of the application command line */
-static PyObject*
-router_LM_ERR(PyObject *self, PyObject *args)
+
+/*
+ * Python method: LM_GEN1(self, int log_level, str msg)
+ */
+static PyObject *router_LM_GEN1(PyObject *self, PyObject *args)
+{
+    int log_level;
+    char *msg;
+
+    if (!PyArg_ParseTuple(args, "is:LM_GEN1", &log_level, &msg))
+        return NULL;
+
+    LM_GEN1(log_level, "%s", msg);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+/*
+ * Python method: LM_GEN2(self, int log_facility, int log_level, str msg)
+ */
+static PyObject *router_LM_GEN2(PyObject *self, PyObject *args)
+{
+    int log_facility;
+    int log_level;
+    char *msg;
+
+    if(!PyArg_ParseTuple(args, "iis:LM_GEN2", &log_facility, &log_level, &msg))
+        return NULL;
+
+    LM_GEN2(log_facility, log_level, "%s", msg);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+/*
+ * Python method: LM_ALERT(self, str msg)
+ */
+static PyObject *router_LM_ALERT(PyObject *self, PyObject *args)
+{
+    char *msg;
+
+    if(!PyArg_ParseTuple(args, "s:LM_ALERT", &msg))
+        return NULL;
+
+    LM_ALERT("%s", msg);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+/*
+ * Python method: LM_CRIT(self, str msg)
+ */
+static PyObject *router_LM_CRIT(PyObject *self, PyObject *args)
+{
+    char *msg;
+
+    if(!PyArg_ParseTuple(args, "s:LM_CRIT", &msg))
+        return NULL;
+
+    LM_CRIT("%s", msg);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+/*
+ * Python method: LM_WARN(self, str msg)
+ */
+static PyObject *router_LM_WARN(PyObject *self, PyObject *args)
+{
+    char *msg;
+
+    if(!PyArg_ParseTuple(args, "s:LM_WARN", &msg))
+        return NULL;
+
+    LM_WARN("%s", msg);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+/*
+ * Python method: LM_NOTICE(self, str msg)
+ */
+static PyObject *router_LM_NOTICE(PyObject *self, PyObject *args)
+{
+    char *msg;
+
+    if(!PyArg_ParseTuple(args, "s:LM_NOTICE", &msg))
+        return NULL;
+
+    LM_NOTICE("%s", msg);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+/*
+ * Python method: LM_ERR(self, str msg)
+ */
+static PyObject *router_LM_ERR(PyObject *self, PyObject *args)
 {
     char *msg;
 
@@ -42,8 +144,75 @@
     return Py_None;
 }
 
+/*
+ * Python method: LM_INFO(self, str msg)
+ */
+static PyObject *router_LM_INFO(PyObject *self, PyObject *args)
+{
+    char *msg;
+
+    if(!PyArg_ParseTuple(args, "s:LM_INFO", &msg))
+        return NULL;
+
+    LM_INFO("%s", msg);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+/*
+ * Python method: LM_DBG(self, str msg)
+ */
+static PyObject *router_LM_DBG(PyObject *self, PyObject *args)
+{
+    char *msg;
+
+    if(!PyArg_ParseTuple(args, "s:LM_DBG", &msg))
+        return NULL;
+
+    LM_DBG("%s", msg);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
 PyMethodDef RouterMethods[] = {
-    {"LM_ERR", router_LM_ERR, METH_VARARGS,
-     "Pring error message."},
-    {NULL, NULL, 0, NULL}
+    {"LM_GEN1",		router_LM_GEN1,		METH_VARARGS, "Print GEN1 message."},
+    {"LM_GEN2",		router_LM_GEN2,		METH_VARARGS, "Print GEN2 message."},
+    {"LM_ALERT",	router_LM_ALERT,	METH_VARARGS, "Print alert message."},
+    {"LM_CRIT",		router_LM_CRIT,		METH_VARARGS, "Print critical message."},
+    {"LM_ERR",		router_LM_ERR,		METH_VARARGS, "Print error message."},
+    {"LM_WARN",		router_LM_WARN,		METH_VARARGS, "Print warning message."},
+    {"LM_NOTICE",	router_LM_NOTICE,	METH_VARARGS, "Print notice message."},
+    {"LM_INFO",		router_LM_INFO,		METH_VARARGS, "Print info message."},
+    {"LM_DBG",		router_LM_DBG,		METH_VARARGS, "Print debug message."},
+    {NULL, 		NULL, 			0, 		NULL}
 };
+
+/*
+ * Default module properties
+ */
+void RouterAddProperties(PyObject *m)
+{
+    /*
+    * Log levels
+    * Reference: dprint.h
+    */
+    PyModule_AddObject(m, "L_ALERT",  PyInt_FromLong((long)L_ALERT));
+    PyModule_AddObject(m, "L_BUG",    PyInt_FromLong((long)L_BUG));
+    PyModule_AddObject(m, "L_CRIT2",  PyInt_FromLong((long)L_CRIT2)); /* like L_CRIT, but adds prefix */
+    PyModule_AddObject(m, "L_CRIT",   PyInt_FromLong((long)L_CRIT));  /* no prefix added */
+    PyModule_AddObject(m, "L_ERR",    PyInt_FromLong((long)L_ERR));
+    PyModule_AddObject(m, "L_WARN",   PyInt_FromLong((long)L_WARN));
+    PyModule_AddObject(m, "L_NOTICE", PyInt_FromLong((long)L_NOTICE));
+    PyModule_AddObject(m, "L_INFO",   PyInt_FromLong((long)L_INFO));
+    PyModule_AddObject(m, "L_DBG",    PyInt_FromLong((long)L_DBG));
+
+    /*
+    * Facility
+    * Reference: dprint.h
+    */
+    PyModule_AddObject(m, "DEFAULT_FACILITY", PyInt_FromLong((long)DEFAULT_FACILITY));
+}
+
diff -durN old/python_iface.h new/python_iface.h
--- old/python_iface.h	2012-10-16 17:34:29.000000000 +0300
+++ new/python_iface.h	2012-12-04 01:03:53.000000000 +0200
@@ -26,5 +26,6 @@
 #include <Python.h>
 
 extern PyMethodDef RouterMethods[];
+void RouterAddProperties(PyObject *);
 
 #endif
diff -durN old/python_mod.c new/python_mod.c
--- old/python_mod.c	2012-12-04 01:03:05.000000000 +0200
+++ new/python_mod.c	2012-12-04 01:05:38.000000000 +0200
@@ -82,12 +82,11 @@
     child_init                      /* per-child init function */
 };
 
-static int
-mod_init(void)
+static int mod_init(void)
 {
     char *dname, *bname, *dname_src, *bname_src;
     int i;
-    PyObject *sys_path, *pDir, *pModule, *pFunc, *pArgs;
+    PyObject *sys_path, *pDir, *pModule, *pFunc, *pArgs, *m;
     PyThreadState *mainThreadState;
 
     if (script_name.len == 0) {
@@ -127,7 +126,7 @@
     PyEval_InitThreads();
     mainThreadState = PyThreadState_Get();
 
-    Py_InitModule("Router", RouterMethods);
+    m = Py_InitModule("Router", RouterMethods);
 
     if (python_msgobj_init() != 0) {
         LM_ERR("python_msgobj_init() has failed\n");
@@ -135,6 +134,8 @@
         return -1;
     }
 
+    RouterAddProperties(m);
+
     sys_path = PySys_GetObject("path");
     /* PySys_GetObject doesn't pass reference! No need to DEREF */
     if (sys_path == NULL) {
@@ -227,8 +228,7 @@
     return 0;
 }
 
-static int
-child_init(int rank)
+static int child_init(int rank)
 {
     PyObject *pFunc, *pArgs, *pValue, *pResult;
     int rval;
@@ -294,9 +294,7 @@
     return rval;
 }
 
-static void
-mod_destroy(void)
+static void mod_destroy(void)
 {
-
     return;
 }
diff -durN old/README.TestCase-Loggers new/README.TestCase-Loggers
--- old/README.TestCase-Loggers	1970-01-01 03:00:00.000000000 +0300
+++ new/README.TestCase-Loggers	2012-12-04 01:03:53.000000000 +0200
@@ -0,0 +1,16 @@
+
+Example of using loggers in Python:
+
+loadmodule "app_python.so"
+modparam("app_python", "script_name", "/path/to/Loggers.py")
+modparam("app_python", "mod_init_function", "mod_init")
+modparam("app_python", "child_init_method", "child_init")
+
+...
+
+route
+{
+    python_exec("TestLoggers", "Test Message\n");
+    ...
+}
+
