diff --git a/README.md b/README.md
index a08ea052008747981c7d4179752f26f266ff4062..4abcbb1aa615f6f60889bba49136141c054e58af 100644
--- a/README.md
+++ b/README.md
@@ -31,6 +31,7 @@ though binary wheels for:
 * Linux [manylinux2014]:
     * x86_64:
         * Python 3.8
+        * Python 3.9
     * armv7l:
         * Python 3.8
 
@@ -47,11 +48,14 @@ python setup.py bdist_wheel
 
 Then copy your resulting wheel and install it via pip on the target system.
 
+Be aware that tempsdb does logging. If necessary, setting log level of 
+logger `tempsdb` to WARN will eliminate all warnings that tempsdb outputs.
+
 # Changelog
 
 ## v0.6.3
 
-* _TBA_
+* added logging for opening and closing series
 
 ## v0.6.2
 
diff --git a/docs/usage.rst b/docs/usage.rst
index a535da6f87dd0e5b89f7db26d2ac7d4f0fcca98c..4c3876be159c511cb00cce2a20673c5e6365c926 100644
--- a/docs/usage.rst
+++ b/docs/usage.rst
@@ -48,3 +48,9 @@ Appending the data is done via :meth:`~tempsdb.series.TimeSeries.append`. Since
 allocated in entire pages, so your files will be padded to a page in size. This makes writes
 quite fast, as in 99.9% cases it is just a memory operation.
 
+Logging
+-------
+
+tempsdb will log when opening and closing series. To prevent this from happening, just call:
+
+.. autofunction:: tempsdb.database.disable_logging
diff --git a/setup.cfg b/setup.cfg
index 4e4a4c07a8c963378302255cca244c1abc5768b9..8f3ac7704a66e01702ed37441994a771167332e8 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,7 +1,7 @@
 # coding: utf-8
 [metadata]
 name = tempsdb
-version = 0.6.3a1
+version = 0.6.3
 long-description = file: README.md
 long-description-content-type = text/markdown; charset=UTF-8
 license_files = LICENSE
diff --git a/tempsdb/database.pxd b/tempsdb/database.pxd
index 24594a7434590859cfc677ffa0e791b6202491ab..f6b4df768c13b37289adb751037e28eb1fb1e2cc 100644
--- a/tempsdb/database.pxd
+++ b/tempsdb/database.pxd
@@ -38,4 +38,4 @@ cdef class Database:
     cpdef int sync(self) except -1
 
 cpdef Database create_database(str path)
-
+cpdef int disable_logging() except -1
diff --git a/tempsdb/database.pyx b/tempsdb/database.pyx
index 7391449cee939b9568e1151c402d973904f125c6..b7146519596fee4b479a221ba27162a9b0f6fe92 100644
--- a/tempsdb/database.pyx
+++ b/tempsdb/database.pyx
@@ -1,4 +1,5 @@
 import os
+import logging
 import shutil
 import threading
 import warnings
@@ -10,6 +11,13 @@ from .series cimport TimeSeries, create_series
 from .varlen cimport VarlenSeries
 from .metadata cimport read_meta_at, write_meta_at
 
+
+cpdef int disable_logging() except -1:
+    """Disable logging of tempsdb"""
+    logging.getLogger('tempsdb').setLevel(logging.WARN)
+    return 0
+
+
 cdef class Database:
     """
     A basic TempsDB object.
diff --git a/tempsdb/series.pyx b/tempsdb/series.pyx
index b0ba3981d723b480d4e34e21e117e3c903bf03f5..c33cc2c7c49f80823baa27c6150fe492abfa8484 100644
--- a/tempsdb/series.pyx
+++ b/tempsdb/series.pyx
@@ -4,6 +4,7 @@ import typing as tp
 import shutil
 import threading
 import warnings
+import logging
 
 from .chunks.base cimport Chunk
 from .chunks.normal cimport NormalChunk
@@ -13,7 +14,9 @@ from .exceptions import DoesNotExist, Corruption, InvalidState, AlreadyExists
 from .metadata cimport read_meta_at, write_meta_at
 
 
-cdef set metadata_file_names = {'metadata.txt', 'metadata.minijson'}
+cdef:
+    set metadata_file_names = {'metadata.txt', 'metadata.minijson'}
+    object logger = logging.getLogger(__name__)
 
 
 cdef class TimeSeries:
@@ -96,6 +99,7 @@ cdef class TimeSeries:
         return 0
 
     def __init__(self, str path, str name, bint use_descriptor_based_access = False):
+        logger.info('Opening new time series at %s called %s', path, name)
         self.descriptor_based_access = use_descriptor_based_access
         self.mpm = None
         self.name = name
@@ -281,6 +285,7 @@ cdef class TimeSeries:
             self.mpm.cancel()
             self.mpm = None
         self.closed = True
+        logger.info('Closed time series at %s called %s', self.path, self.name)
         return 0
 
     cdef unsigned int get_index_of_chunk_for(self, unsigned long long timestamp):
diff --git a/tempsdb/varlen.pyx b/tempsdb/varlen.pyx
index 964b246997854867b4b89644c99cb4281ee75a3b..c187bc49565ff1b1a5582f3321a127f9dc7ec28b 100644
--- a/tempsdb/varlen.pyx
+++ b/tempsdb/varlen.pyx
@@ -1,4 +1,5 @@
 import os
+import logging
 import shutil
 import typing as tp
 import struct
@@ -7,8 +8,9 @@ import warnings
 from .chunks.base cimport Chunk
 from .exceptions import Corruption, AlreadyExists, StillOpen
 from .iterators cimport Iterator
-from tempsdb.series cimport TimeSeries, create_series
+from .series cimport TimeSeries, create_series
 
+cdef object logger = logging.getLogger(__name__)
 
 cdef class VarlenEntry:
     """
@@ -495,6 +497,7 @@ cdef class VarlenSeries:
             it.close()
 
     def __init__(self, str path, str name, bint use_descriptor_based_access = False):
+        logger.info('Opening varlen series at %s called %s', path, name)
         self.closed = False
         self.mmap_enabled = not use_descriptor_based_access
         self.path = path
@@ -690,6 +693,7 @@ cdef class VarlenSeries:
         cdef TimeSeries series
         for series in self.series:
             series.close()
+        logger.info('Closed varlen series at %s called %s', self.path, self.name)
         return 0
 
     cpdef int trim(self, unsigned long long timestamp) except -1: