diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerSetLogLevel.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerSetLogLevel.swift
new file mode 100644
index 0000000000000000000000000000000000000000..21e39bd78035438955587c816602956313389fa4
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerSetLogLevel.swift
@@ -0,0 +1,22 @@
+import XCTestDynamicOverlay
+import XXClient
+
+public struct MessengerSetLogLevel {
+  public var run: (LogLevel) throws -> Bool
+
+  public func callAsFunction(_ logLevel: LogLevel) throws -> Bool {
+    try run(logLevel)
+  }
+}
+
+extension MessengerSetLogLevel {
+  public static func live(_ env: MessengerEnvironment) -> MessengerSetLogLevel {
+    MessengerSetLogLevel(run: env.setLogLevel.run)
+  }
+}
+
+extension MessengerSetLogLevel {
+  public static let unimplemented = MessengerSetLogLevel(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift
index 692d81fd9bdb7ee8cb540b9a4f1a844e7541966d..168cd84af606b70c37549b8a524e26f306dca8ec 100644
--- a/Sources/XXMessengerClient/Messenger/Messenger.swift
+++ b/Sources/XXMessengerClient/Messenger/Messenger.swift
@@ -38,6 +38,7 @@ public struct Messenger {
   public var resumeBackup: MessengerResumeBackup
   public var backupParams: MessengerBackupParams
   public var stopBackup: MessengerStopBackup
+  public var setLogLevel: MessengerSetLogLevel
 }
 
 extension Messenger {
@@ -79,7 +80,8 @@ extension Messenger {
       startBackup: .live(env),
       resumeBackup: .live(env),
       backupParams: .live(env),
-      stopBackup: .live(env)
+      stopBackup: .live(env),
+      setLogLevel: .live(env)
     )
   }
 }
@@ -122,6 +124,7 @@ extension Messenger {
     startBackup: .unimplemented,
     resumeBackup: .unimplemented,
     backupParams: .unimplemented,
-    stopBackup: .unimplemented
+    stopBackup: .unimplemented,
+    setLogLevel: .unimplemented
   )
 }
diff --git a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
index f019df1618b0985f70936fdeb97e4558060a46eb..bb26093a24d97792904b9a8f5ca974d0c9853d66 100644
--- a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
+++ b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
@@ -31,6 +31,7 @@ public struct MessengerEnvironment {
   public var registerForNotifications: RegisterForNotifications
   public var resumeBackup: ResumeBackup
   public var searchUD: SearchUD
+  public var setLogLevel: SetLogLevel
   public var sleep: (TimeInterval) -> Void
   public var storageDir: String
   public var ud: Stored<UserDiscovery?>
@@ -76,6 +77,7 @@ extension MessengerEnvironment {
       registerForNotifications: .live,
       resumeBackup: .live,
       searchUD: .live,
+      setLogLevel: .live,
       sleep: { Thread.sleep(forTimeInterval: $0) },
       storageDir: MessengerEnvironment.defaultStorageDir,
       ud: .inMemory(),
@@ -116,6 +118,7 @@ extension MessengerEnvironment {
     registerForNotifications: .unimplemented,
     resumeBackup: .unimplemented,
     searchUD: .unimplemented,
+    setLogLevel: .unimplemented,
     sleep: XCTUnimplemented("\(Self.self).sleep"),
     storageDir: "unimplemented",
     ud: .unimplemented(),
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSetLogLevelTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSetLogLevelTests.swift
new file mode 100644
index 0000000000000000000000000000000000000000..d6d44d05465f52cc6c9cb7b0a949397d22560b42
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSetLogLevelTests.swift
@@ -0,0 +1,44 @@
+import CustomDump
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerSetLogLevelTests: XCTestCase {
+  func testSetLogLevel() throws {
+    var didSetLogLevel: [LogLevel] = []
+    var env: MessengerEnvironment = .unimplemented
+    env.setLogLevel.run = { level in
+      didSetLogLevel.append(level)
+      return true
+    }
+    let setLogLevel: MessengerSetLogLevel = .live(env)
+
+    let result = try setLogLevel(.debug)
+
+    XCTAssertNoDifference(didSetLogLevel, [.debug])
+    XCTAssertNoDifference(result, true)
+  }
+
+  func testSetLogLevelReturnsFalse() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.setLogLevel.run = { _ in return false }
+    let setLogLevel: MessengerSetLogLevel = .live(env)
+
+    let result = try setLogLevel(.debug)
+
+    XCTAssertNoDifference(result, false)
+  }
+
+  func testSetLogLevelFailure() {
+    struct Failure: Error, Equatable {}
+    let failure = Failure()
+
+    var env: MessengerEnvironment = .unimplemented
+    env.setLogLevel.run = { _ in throw failure }
+    let setLogLevel: MessengerSetLogLevel = .live(env)
+
+    XCTAssertThrowsError(try setLogLevel(.debug)) { error in
+      XCTAssertNoDifference(error as NSError, failure as NSError)
+    }
+  }
+}