diff --git a/pkg/log/client.go b/log/client.go
similarity index 100%
rename from pkg/log/client.go
rename to log/client.go
diff --git a/pkg/log/log.go b/log/log.go
similarity index 100%
rename from pkg/log/log.go
rename to log/log.go
diff --git a/pkg/log/log_test.go b/log/log_test.go
similarity index 100%
rename from pkg/log/log_test.go
rename to log/log_test.go
diff --git a/pkg/log/mocks/Service.go b/log/mocks/Service.go
similarity index 65%
rename from pkg/log/mocks/Service.go
rename to log/mocks/Service.go
index 4038268ceb95c06985d1730b09cffbaee3fe8e03..2957bf029c970d9fb65fc564af8d692e0d41e0de 100644
--- a/pkg/log/mocks/Service.go
+++ b/log/mocks/Service.go
@@ -5,7 +5,7 @@ package mocks
 import (
 	context "context"
 
-	log "git.perx.ru/perxis/perxis-go/pkg/log"
+	log2 "git.perx.ru/perxis/perxis-go/log"
 	mock "github.com/stretchr/testify/mock"
 
 	options "git.perx.ru/perxis/perxis-go/pkg/options"
@@ -17,7 +17,7 @@ type Service struct {
 }
 
 // Delete provides a mock function with given fields: ctx, filter
-func (_m *Service) Delete(ctx context.Context, filter *log.Filter) error {
+func (_m *Service) Delete(ctx context.Context, filter *log2.Filter) error {
 	ret := _m.Called(ctx, filter)
 
 	if len(ret) == 0 {
@@ -25,7 +25,7 @@ func (_m *Service) Delete(ctx context.Context, filter *log.Filter) error {
 	}
 
 	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, *log.Filter) error); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *log2.Filter) error); ok {
 		r0 = rf(ctx, filter)
 	} else {
 		r0 = ret.Error(0)
@@ -35,27 +35,27 @@ func (_m *Service) Delete(ctx context.Context, filter *log.Filter) error {
 }
 
 // Find provides a mock function with given fields: ctx, filter, _a2
-func (_m *Service) Find(ctx context.Context, filter *log.Filter, _a2 *options.FindOptions) (*log.FindResult, error) {
+func (_m *Service) Find(ctx context.Context, filter *log2.Filter, _a2 *options.FindOptions) (*log2.FindResult, error) {
 	ret := _m.Called(ctx, filter, _a2)
 
 	if len(ret) == 0 {
 		panic("no return value specified for Find")
 	}
 
-	var r0 *log.FindResult
+	var r0 *log2.FindResult
 	var r1 error
-	if rf, ok := ret.Get(0).(func(context.Context, *log.Filter, *options.FindOptions) (*log.FindResult, error)); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *log2.Filter, *options.FindOptions) (*log2.FindResult, error)); ok {
 		return rf(ctx, filter, _a2)
 	}
-	if rf, ok := ret.Get(0).(func(context.Context, *log.Filter, *options.FindOptions) *log.FindResult); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *log2.Filter, *options.FindOptions) *log2.FindResult); ok {
 		r0 = rf(ctx, filter, _a2)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).(*log.FindResult)
+			r0 = ret.Get(0).(*log2.FindResult)
 		}
 	}
 
-	if rf, ok := ret.Get(1).(func(context.Context, *log.Filter, *options.FindOptions) error); ok {
+	if rf, ok := ret.Get(1).(func(context.Context, *log2.Filter, *options.FindOptions) error); ok {
 		r1 = rf(ctx, filter, _a2)
 	} else {
 		r1 = ret.Error(1)
@@ -65,7 +65,7 @@ func (_m *Service) Find(ctx context.Context, filter *log.Filter, _a2 *options.Fi
 }
 
 // Log provides a mock function with given fields: ctx, entries
-func (_m *Service) Log(ctx context.Context, entries []*log.Entry) error {
+func (_m *Service) Log(ctx context.Context, entries []*log2.Entry) error {
 	ret := _m.Called(ctx, entries)
 
 	if len(ret) == 0 {
@@ -73,7 +73,7 @@ func (_m *Service) Log(ctx context.Context, entries []*log.Entry) error {
 	}
 
 	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, []*log.Entry) error); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, []*log2.Entry) error); ok {
 		r0 = rf(ctx, entries)
 	} else {
 		r0 = ret.Error(0)
diff --git a/pkg/log/mocks/Storage.go b/log/mocks/Storage.go
similarity index 71%
rename from pkg/log/mocks/Storage.go
rename to log/mocks/Storage.go
index 3b5a32f56c74091399b3fefdc0ba546f568f882a..33b9b97a992bdfe985642918543e7fb590440f50 100644
--- a/pkg/log/mocks/Storage.go
+++ b/log/mocks/Storage.go
@@ -5,7 +5,7 @@ package mocks
 import (
 	context "context"
 
-	log "git.perx.ru/perxis/perxis-go/pkg/log"
+	log2 "git.perx.ru/perxis/perxis-go/log"
 	mock "github.com/stretchr/testify/mock"
 
 	options "git.perx.ru/perxis/perxis-go/pkg/options"
@@ -17,7 +17,7 @@ type Storage struct {
 }
 
 // Delete provides a mock function with given fields: ctx, filter
-func (_m *Storage) Delete(ctx context.Context, filter *log.Filter) error {
+func (_m *Storage) Delete(ctx context.Context, filter *log2.Filter) error {
 	ret := _m.Called(ctx, filter)
 
 	if len(ret) == 0 {
@@ -25,7 +25,7 @@ func (_m *Storage) Delete(ctx context.Context, filter *log.Filter) error {
 	}
 
 	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, *log.Filter) error); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *log2.Filter) error); ok {
 		r0 = rf(ctx, filter)
 	} else {
 		r0 = ret.Error(0)
@@ -35,34 +35,34 @@ func (_m *Storage) Delete(ctx context.Context, filter *log.Filter) error {
 }
 
 // Find provides a mock function with given fields: ctx, filter, _a2
-func (_m *Storage) Find(ctx context.Context, filter *log.Filter, _a2 *options.FindOptions) ([]*log.Entry, int, error) {
+func (_m *Storage) Find(ctx context.Context, filter *log2.Filter, _a2 *options.FindOptions) ([]*log2.Entry, int, error) {
 	ret := _m.Called(ctx, filter, _a2)
 
 	if len(ret) == 0 {
 		panic("no return value specified for Find")
 	}
 
-	var r0 []*log.Entry
+	var r0 []*log2.Entry
 	var r1 int
 	var r2 error
-	if rf, ok := ret.Get(0).(func(context.Context, *log.Filter, *options.FindOptions) ([]*log.Entry, int, error)); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *log2.Filter, *options.FindOptions) ([]*log2.Entry, int, error)); ok {
 		return rf(ctx, filter, _a2)
 	}
-	if rf, ok := ret.Get(0).(func(context.Context, *log.Filter, *options.FindOptions) []*log.Entry); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, *log2.Filter, *options.FindOptions) []*log2.Entry); ok {
 		r0 = rf(ctx, filter, _a2)
 	} else {
 		if ret.Get(0) != nil {
-			r0 = ret.Get(0).([]*log.Entry)
+			r0 = ret.Get(0).([]*log2.Entry)
 		}
 	}
 
-	if rf, ok := ret.Get(1).(func(context.Context, *log.Filter, *options.FindOptions) int); ok {
+	if rf, ok := ret.Get(1).(func(context.Context, *log2.Filter, *options.FindOptions) int); ok {
 		r1 = rf(ctx, filter, _a2)
 	} else {
 		r1 = ret.Get(1).(int)
 	}
 
-	if rf, ok := ret.Get(2).(func(context.Context, *log.Filter, *options.FindOptions) error); ok {
+	if rf, ok := ret.Get(2).(func(context.Context, *log2.Filter, *options.FindOptions) error); ok {
 		r2 = rf(ctx, filter, _a2)
 	} else {
 		r2 = ret.Error(2)
@@ -90,7 +90,7 @@ func (_m *Storage) Init(ctx context.Context) error {
 }
 
 // Log provides a mock function with given fields: ctx, entry
-func (_m *Storage) Log(ctx context.Context, entry []*log.Entry) error {
+func (_m *Storage) Log(ctx context.Context, entry []*log2.Entry) error {
 	ret := _m.Called(ctx, entry)
 
 	if len(ret) == 0 {
@@ -98,7 +98,7 @@ func (_m *Storage) Log(ctx context.Context, entry []*log.Entry) error {
 	}
 
 	var r0 error
-	if rf, ok := ret.Get(0).(func(context.Context, []*log.Entry) error); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, []*log2.Entry) error); ok {
 		r0 = rf(ctx, entry)
 	} else {
 		r0 = ret.Error(0)
diff --git a/pkg/log/service.go b/log/service.go
similarity index 100%
rename from pkg/log/service.go
rename to log/service.go
diff --git a/pkg/log/storage.go b/log/storage.go
similarity index 100%
rename from pkg/log/storage.go
rename to log/storage.go