From d6961e85b729474602413d80b8a8f0e8751b4c38 Mon Sep 17 00:00:00 2001 From: John Harrington <84741727+harr1424@users.noreply.github.com> Date: Mon, 13 Oct 2025 07:53:45 -0700 Subject: [PATCH] =?UTF-8?q?address=20requested=20changes:=20=E2=80=A2=20up?= =?UTF-8?q?dated=20import=20paths=20to=20import=20from=20@bitwarden/loggin?= =?UTF-8?q?g=20=E2=80=A2=20deleted=20barrel=20export=20file=20from=20libs/?= =?UTF-8?q?common/src/tools/log=20and=20updated=20all=20imports=20to=20use?= =?UTF-8?q?=20@bitwarden/logging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/common/src/tools/log/index.ts | 1 - libs/common/src/tools/providers.spec.ts | 3 +- libs/common/src/tools/providers.ts | 8 +++- libs/importer/src/services/import.service.ts | 2 +- .../src/default-semantic-logger.spec.ts | 35 ++++++++-------- libs/logging/src/default-semantic-logger.ts | 27 ++++++------- libs/logging/src/factory.ts | 3 +- libs/logging/src/index.ts | 40 +------------------ .../src/generator-services.module.ts | 6 +-- .../providers/generator-metadata-provider.ts | 2 +- 10 files changed, 43 insertions(+), 84 deletions(-) delete mode 100644 libs/common/src/tools/log/index.ts diff --git a/libs/common/src/tools/log/index.ts b/libs/common/src/tools/log/index.ts deleted file mode 100644 index a0b8daaa49f..00000000000 --- a/libs/common/src/tools/log/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "@bitwarden/logging"; diff --git a/libs/common/src/tools/providers.spec.ts b/libs/common/src/tools/providers.spec.ts index 5953e5ebab2..3991b174c35 100644 --- a/libs/common/src/tools/providers.spec.ts +++ b/libs/common/src/tools/providers.spec.ts @@ -1,5 +1,7 @@ import { mock, MockProxy } from "jest-mock-extended"; +import { disabledSemanticLoggerProvider } from "@bitwarden/logging"; + import { PolicyService } from "../admin-console/abstractions/policy/policy.service.abstraction"; import { ConfigService } from "../platform/abstractions/config/config.service"; import { LogService } from "../platform/abstractions/log.service"; @@ -9,7 +11,6 @@ import { StateProvider } from "../platform/state"; import { LegacyEncryptorProvider } from "./cryptography/legacy-encryptor-provider"; import { ExtensionRegistry } from "./extension/extension-registry.abstraction"; import { ExtensionService } from "./extension/extension.service"; -import { disabledSemanticLoggerProvider } from "./log"; import { createSystemServiceProvider } from "./providers"; describe("SystemServiceProvider", () => { diff --git a/libs/common/src/tools/providers.ts b/libs/common/src/tools/providers.ts index ac42c556042..7ed6bcb665f 100644 --- a/libs/common/src/tools/providers.ts +++ b/libs/common/src/tools/providers.ts @@ -1,4 +1,9 @@ -import { LogService } from "@bitwarden/logging"; +import { + disabledSemanticLoggerProvider, + enableLogForTypes, + LogProvider, + LogService, +} from "@bitwarden/logging"; import { BitwardenClient } from "@bitwarden/sdk-internal"; import { StateProvider } from "@bitwarden/state"; @@ -9,7 +14,6 @@ import { PlatformUtilsService } from "../platform/abstractions/platform-utils.se import { LegacyEncryptorProvider } from "./cryptography/legacy-encryptor-provider"; import { ExtensionRegistry } from "./extension/extension-registry.abstraction"; import { ExtensionService } from "./extension/extension.service"; -import { disabledSemanticLoggerProvider, enableLogForTypes, LogProvider } from "./log"; /** Provides access to commonly-used cross-cutting services. */ export type SystemServiceProvider = { diff --git a/libs/importer/src/services/import.service.ts b/libs/importer/src/services/import.service.ts index 351d89be3fa..f5b311ed4df 100644 --- a/libs/importer/src/services/import.service.ts +++ b/libs/importer/src/services/import.service.ts @@ -20,7 +20,6 @@ import { KvpRequest } from "@bitwarden/common/models/request/kvp.request"; import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; -import { SemanticLogger } from "@bitwarden/common/tools/log"; import { SystemServiceProvider } from "@bitwarden/common/tools/providers"; import { OrganizationId } from "@bitwarden/common/types/guid"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; @@ -32,6 +31,7 @@ import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; import { RestrictedItemTypesService } from "@bitwarden/common/vault/services/restricted-item-types.service"; import { KeyService } from "@bitwarden/key-management"; +import { SemanticLogger } from "@bitwarden/logging"; import { AscendoCsvImporter, diff --git a/libs/logging/src/default-semantic-logger.spec.ts b/libs/logging/src/default-semantic-logger.spec.ts index 486d1417712..684f0945578 100644 --- a/libs/logging/src/default-semantic-logger.spec.ts +++ b/libs/logging/src/default-semantic-logger.spec.ts @@ -1,9 +1,8 @@ import { mock } from "jest-mock-extended"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { LogLevelType } from "@bitwarden/common/platform/enums"; - import { DefaultSemanticLogger } from "./default-semantic-logger"; +import { LogLevel } from "./log-level"; +import { LogService } from "./log.service"; const logger = mock(); @@ -18,7 +17,7 @@ describe("DefaultSemanticLogger", () => { log.debug("this is a debug message"); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Debug, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Debug, { "@timestamp": 0, message: "this is a debug message", level: "debug", @@ -30,7 +29,7 @@ describe("DefaultSemanticLogger", () => { log.debug({ example: "this is content" }); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Debug, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Debug, { "@timestamp": 0, content: { example: "this is content" }, level: "debug", @@ -42,7 +41,7 @@ describe("DefaultSemanticLogger", () => { log.info({ example: "this is content" }, "this is a message"); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Info, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Info, { "@timestamp": 0, content: { example: "this is content" }, message: "this is a message", @@ -57,7 +56,7 @@ describe("DefaultSemanticLogger", () => { log.info("this is an info message"); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Info, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Info, { "@timestamp": 0, message: "this is an info message", level: "information", @@ -69,7 +68,7 @@ describe("DefaultSemanticLogger", () => { log.info({ example: "this is content" }); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Info, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Info, { "@timestamp": 0, content: { example: "this is content" }, level: "information", @@ -81,7 +80,7 @@ describe("DefaultSemanticLogger", () => { log.info({ example: "this is content" }, "this is a message"); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Info, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Info, { "@timestamp": 0, content: { example: "this is content" }, message: "this is a message", @@ -96,7 +95,7 @@ describe("DefaultSemanticLogger", () => { log.warn("this is a warning message"); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Warning, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Warning, { "@timestamp": 0, message: "this is a warning message", level: "warning", @@ -108,7 +107,7 @@ describe("DefaultSemanticLogger", () => { log.warn({ example: "this is content" }); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Warning, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Warning, { "@timestamp": 0, content: { example: "this is content" }, level: "warning", @@ -120,7 +119,7 @@ describe("DefaultSemanticLogger", () => { log.warn({ example: "this is content" }, "this is a message"); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Warning, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Warning, { "@timestamp": 0, content: { example: "this is content" }, message: "this is a message", @@ -135,7 +134,7 @@ describe("DefaultSemanticLogger", () => { log.error("this is an error message"); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Error, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Error, { "@timestamp": 0, message: "this is an error message", level: "error", @@ -147,7 +146,7 @@ describe("DefaultSemanticLogger", () => { log.error({ example: "this is content" }); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Error, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Error, { "@timestamp": 0, content: { example: "this is content" }, level: "error", @@ -159,7 +158,7 @@ describe("DefaultSemanticLogger", () => { log.error({ example: "this is content" }, "this is a message"); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Error, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Error, { "@timestamp": 0, content: { example: "this is content" }, message: "this is a message", @@ -174,7 +173,7 @@ describe("DefaultSemanticLogger", () => { expect(() => log.panic("this is an error message")).toThrow("this is an error message"); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Error, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Error, { "@timestamp": 0, message: "this is an error message", level: "error", @@ -188,7 +187,7 @@ describe("DefaultSemanticLogger", () => { "this is an error message", ); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Error, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Error, { "@timestamp": 0, content: { example: "this is content" }, message: "this is an error message", @@ -203,7 +202,7 @@ describe("DefaultSemanticLogger", () => { "this is an error message", ); - expect(logger.write).toHaveBeenCalledWith(LogLevelType.Error, { + expect(logger.write).toHaveBeenCalledWith(LogLevel.Error, { "@timestamp": 0, content: "this is content", message: "this is an error message", diff --git a/libs/logging/src/default-semantic-logger.ts b/libs/logging/src/default-semantic-logger.ts index 499a0c7fb09..dacda8e4ed6 100644 --- a/libs/logging/src/default-semantic-logger.ts +++ b/libs/logging/src/default-semantic-logger.ts @@ -1,8 +1,7 @@ import { Jsonify } from "type-fest"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { LogLevelType } from "@bitwarden/common/platform/enums"; - +import { LogLevel } from "./log-level"; +import { LogService } from "./log.service"; import { SemanticLogger } from "./semantic-logger.abstraction"; /** Sends semantic logs to the console. @@ -26,29 +25,29 @@ export class DefaultSemanticLogger implements SemanticLo readonly context: object; debug(content: Jsonify, message?: string): void { - this.log(content, LogLevelType.Debug, message); + this.log(content, LogLevel.Debug, message); } info(content: Jsonify, message?: string): void { - this.log(content, LogLevelType.Info, message); + this.log(content, LogLevel.Info, message); } warn(content: Jsonify, message?: string): void { - this.log(content, LogLevelType.Warning, message); + this.log(content, LogLevel.Warning, message); } error(content: Jsonify, message?: string): void { - this.log(content, LogLevelType.Error, message); + this.log(content, LogLevel.Error, message); } panic(content: Jsonify, message?: string): never { - this.log(content, LogLevelType.Error, message); + this.log(content, LogLevel.Error, message); const panicMessage = message ?? (typeof content === "string" ? content : "a fatal error occurred"); throw new Error(panicMessage); } - private log(content: Jsonify, level: LogLevelType, message?: string) { + private log(content: Jsonify, level: LogLevel, message?: string) { const log = { ...this.context, message, @@ -66,15 +65,15 @@ export class DefaultSemanticLogger implements SemanticLo } } -function stringifyLevel(level: LogLevelType) { +function stringifyLevel(level: LogLevel) { switch (level) { - case LogLevelType.Debug: + case LogLevel.Debug: return "debug"; - case LogLevelType.Info: + case LogLevel.Info: return "information"; - case LogLevelType.Warning: + case LogLevel.Warning: return "warning"; - case LogLevelType.Error: + case LogLevel.Error: return "error"; default: return `${level}`; diff --git a/libs/logging/src/factory.ts b/libs/logging/src/factory.ts index 3427d5e6722..24fc6b42b6b 100644 --- a/libs/logging/src/factory.ts +++ b/libs/logging/src/factory.ts @@ -1,9 +1,8 @@ import { Jsonify } from "type-fest"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; - import { DefaultSemanticLogger } from "./default-semantic-logger"; import { DISABLED_LOGGER } from "./disabled-logger"; +import { LogService } from "./log.service"; import { SemanticLogger } from "./semantic-logger.abstraction"; import { LogProvider } from "./types"; import { warnLoggingEnabled } from "./util"; diff --git a/libs/logging/src/index.ts b/libs/logging/src/index.ts index 65e8c03605f..b5fca0440c8 100644 --- a/libs/logging/src/index.ts +++ b/libs/logging/src/index.ts @@ -1,7 +1,3 @@ -import { Jsonify } from "type-fest"; - -import { SemanticLogger } from "./semantic-logger.abstraction"; - export { LogService } from "./log.service"; export { LogLevel } from "./log-level"; export { ConsoleLogService } from "./console-log.service"; @@ -13,38 +9,4 @@ export { enableLogForTypes, ifEnabledSemanticLoggerProvider, } from "./factory"; - -/** - * Creates a semantic logger with a fixed context that is included in all log messages. - * - * @param context - Contextual metadata that will be included in every log entry - * emitted by the returned logger. This is used to identify the source or scope - * of log messages (e.g., `{ type: "ImportService" }` or `{ accountId: "123" }`). - * - * @returns A SemanticLogger instance that includes the provided context in all log output. - * - * @remarks - * By convention, avoid using the following field names in the context object, as they - * may conflict with fields added by the semantic logging implementation: - * - `message` - The log message text - * - `level` - The log level (debug, info, warn, error, panic) - * - `provider` - The logging provider identifier - * - `content` - Additional data passed to individual log calls - * - * Note: These field names are not enforced at compile-time or runtime, but using them - * may result in unexpected behavior or field name collisions in log output. - * - * @example - * ```typescript - * // Create a logger for a service - * const log = logProvider({ type: "ImportService" }); - * - * // All logs from this logger will include { type: "ImportService" } - * log.debug("Starting import"); - * // Output: { type: "ImportService", level: "debug", message: "Starting import" } - * - * log.info({ itemCount: 42 }, "Import complete"); - * // Output: { type: "ImportService", level: "info", content: { itemCount: 42 }, message: "Import complete" } - * ``` - */ -export type LogProvider = (context: Jsonify) => SemanticLogger; +export type { LogProvider } from "./types"; diff --git a/libs/tools/generator/components/src/generator-services.module.ts b/libs/tools/generator/components/src/generator-services.module.ts index aed1a13bcc0..2e59469463c 100644 --- a/libs/tools/generator/components/src/generator-services.module.ts +++ b/libs/tools/generator/components/src/generator-services.module.ts @@ -22,11 +22,6 @@ import { DefaultFields, DefaultSites, Extension } from "@bitwarden/common/tools/ import { RuntimeExtensionRegistry } from "@bitwarden/common/tools/extension/runtime-extension-registry"; import { VendorExtensions, Vendors } from "@bitwarden/common/tools/extension/vendor"; import { RestClient } from "@bitwarden/common/tools/integration/rpc"; -import { - LogProvider, - disabledSemanticLoggerProvider, - enableLogForTypes, -} from "@bitwarden/common/tools/log"; import { SystemServiceProvider } from "@bitwarden/common/tools/providers"; import { UserStateSubjectDependencyProvider } from "@bitwarden/common/tools/state/user-state-subject-dependency-provider"; import { @@ -38,6 +33,7 @@ import { DefaultCredentialGeneratorService, } from "@bitwarden/generator-core"; import { KeyService } from "@bitwarden/key-management"; +import { LogProvider, disabledSemanticLoggerProvider, enableLogForTypes } from "@bitwarden/logging"; export const RANDOMIZER = new SafeInjectionToken("Randomizer"); const GENERATOR_SERVICE_PROVIDER = new SafeInjectionToken( diff --git a/libs/tools/generator/core/src/providers/generator-metadata-provider.ts b/libs/tools/generator/core/src/providers/generator-metadata-provider.ts index 52901545023..5e3ba8792f7 100644 --- a/libs/tools/generator/core/src/providers/generator-metadata-provider.ts +++ b/libs/tools/generator/core/src/providers/generator-metadata-provider.ts @@ -4,11 +4,11 @@ import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { Account } from "@bitwarden/common/auth/abstractions/account.service"; import { BoundDependency } from "@bitwarden/common/tools/dependencies"; import { ExtensionSite } from "@bitwarden/common/tools/extension"; -import { SemanticLogger } from "@bitwarden/common/tools/log"; import { SystemServiceProvider } from "@bitwarden/common/tools/providers"; import { anyComplete, memoizedMap, pin } from "@bitwarden/common/tools/rx"; import { UserStateSubject } from "@bitwarden/common/tools/state/user-state-subject"; import { UserStateSubjectDependencyProvider } from "@bitwarden/common/tools/state/user-state-subject-dependency-provider"; +import { SemanticLogger } from "@bitwarden/logging"; import { GeneratorMetadata,