Refactor logging level handling and remove example usage

* Updated `CommandLineOptions` and `ConfigurationObject` to use `LoggingLevel` type instead of string for log levels.
* Modified `LoggerFactory` to set logging levels using the new `LoggingLevelMapping` methods.
* Removed the `example-usage.ts` file as it was no longer needed.
* Adjusted `Threshold` class to simplify logging level management.
This commit is contained in:
2025-08-18 18:22:38 -04:00
parent 9e063550c2
commit 3875b3878d
7 changed files with 34 additions and 77 deletions

View File

@@ -7,4 +7,4 @@ type SupportedBrowser = {
real_mobile: boolean; real_mobile: boolean;
} }
export default SupportedBrowser export default SupportedBrowser;

View File

@@ -5,7 +5,7 @@ import {LoggingLevel, LoggingLevelMapping} from '../logger/LoggingLevel';
export interface CommandLineOptions { export interface CommandLineOptions {
applicationId: string; applicationId: string;
secret: string; secret: string;
logLevel: string; logLevel: LoggingLevel;
pcastUri: string; pcastUri: string;
ingestUri: string; ingestUri: string;
channelUri: string; channelUri: string;
@@ -27,7 +27,7 @@ interface ConfigurationObject {
useBrowserstackLocal: boolean; useBrowserstackLocal: boolean;
browserstackUser: string; browserstackUser: string;
browserstackKey: string; browserstackKey: string;
logLevel: string; logLevel: LoggingLevel;
applicationId: string; applicationId: string;
secret: string; secret: string;
pcastUri: string; pcastUri: string;
@@ -101,7 +101,7 @@ export default class CommandLine {
// Logging options // Logging options
if (config.logLevel) { if (config.logLevel) {
args.push('--log-level', config.logLevel); args.push('--log-level', LoggingLevelMapping.convertLoggingLevelToLoggingLevelType(config.logLevel));
} }
return args; return args;

View File

@@ -1,43 +0,0 @@
import CommandLine from './CommandLine';
// Example configuration object matching your structure
const config = {
viewers: ["chrome", "firefox"],
publishers: [],
tests: ["test/tests/real-time", "test/tests/dash", "test/tests/hls"],
useBrowserstack: false,
useBrowserstackLocal: false,
browserstackUser: "",
browserstackKey: "",
logLevel: "Info",
applicationId: "phenixrts.com-alex.zinn",
secret: "AMAsDzr.dIuGMZ.Zu52Dt~MQvP!DZwYg",
pcastUri: "https://pcast-stg.phenixrts.com",
ingestUri: "rtmp://ingest-stg.phenixrts.com:80/ingest",
channelUri: "https://pcast-stg.phenixrts.com/channel",
};
// Convert configuration to command line arguments
const args = CommandLine.configToArgs(config);
console.log('Generated command line arguments:');
console.log(args.join(' '));
console.log('\nThis generates the equivalent of:');
console.log('--application-id phenixrts.com-alex.zinn \\');
console.log('--secret AMAsDzr.dIuGMZ.Zu52Dt~MQvP!DZwYg \\');
console.log('--pcast-uri https://pcast-stg.phenixrts.com \\');
console.log('--channel-uri https://pcast-stg.phenixrts.com/channel \\');
console.log('--ingest-uri rtmp://ingest-stg.phenixrts.com:80/ingest \\');
console.log('--viewer chrome \\');
console.log('--viewer firefox \\');
console.log('--test test/tests/real-time \\');
console.log('--test test/tests/dash \\');
console.log('--test test/tests/hls \\');
console.log('--log-level Info');
console.log('\nNote: Users can pass --viewer, --publisher, and -t multiple times to build arrays');
// You can now use these arguments with the CommandLine.parse method
// const options = CommandLine.parse(args);
// console.log('Parsed options:', options);

View File

@@ -1,19 +1,19 @@
import { ConsoleAppender } from './appenders/ConsoleAppender'; import { ConsoleAppender } from './appenders/ConsoleAppender';
import IAppender from './appenders/IAppender'; import IAppender from './appenders/IAppender';
import {Logger} from './Logger'; import {Logger} from './Logger';
import {LoggingLevel} from './LoggingLevel'; import {LoggingLevel, LoggingLevelMapping, LoggingLevelType} from './LoggingLevel';
import {Threshold} from './Threshold'; import {Threshold} from './Threshold';
export default class LoggerFactory { export default class LoggerFactory {
private static readonly _loggerForCategory: Map<string, Logger> = new Map(); private static readonly _loggerForCategory: Map<string, Logger> = new Map();
private static readonly _threshold: Threshold = new Threshold({level: LoggingLevel.Debug}); private static readonly _threshold: {level: LoggingLevel} = {level: LoggingLevel.Info};
private static readonly _appenders: IAppender[] = [new ConsoleAppender()]; private static readonly _appenders: IAppender[] = [new ConsoleAppender()];
public static getLogger(category: string): Logger { public static getLogger(category: string): Logger {
let logger = LoggerFactory._loggerForCategory.get(category); let logger = LoggerFactory._loggerForCategory.get(category);
if (logger === undefined) { if (logger === undefined) {
logger = new Logger({category, threshold: LoggerFactory._threshold, appenders: LoggerFactory._appenders}); logger = new Logger({category, threshold: new Threshold(LoggerFactory._threshold), appenders: LoggerFactory._appenders});
LoggerFactory._loggerForCategory.set(category, logger); LoggerFactory._loggerForCategory.set(category, logger);
} }
@@ -21,6 +21,12 @@ export default class LoggerFactory {
return logger; return logger;
} }
public static setLoggingLevel(level: LoggingLevelType): void {
const loggingLevel = LoggingLevelMapping.convertLoggingLevelTypeToLoggingLevel(level);
console.log(`${new Date().toISOString()} [LoggerFactory] Setting logging level to [${level}]`);
LoggerFactory._threshold.level = loggingLevel;
}
private constructor() { private constructor() {
throw new Error('[LoggerFactory] is a static class that may not be instantiated'); throw new Error('[LoggerFactory] is a static class that may not be instantiated');
} }

View File

@@ -37,21 +37,21 @@ export class LoggingLevelMapping {
public static convertLoggingLevelTypeToLoggingLevel(level: LoggingLevelType): LoggingLevel { public static convertLoggingLevelTypeToLoggingLevel(level: LoggingLevelType): LoggingLevel {
switch (level) { switch (level) {
case 'Off': case 'off':
return LoggingLevel.Off; return LoggingLevel.Off;
case 'Fatal': case 'fatal':
return LoggingLevel.Fatal; return LoggingLevel.Fatal;
case 'Error': case 'error':
return LoggingLevel.Error; return LoggingLevel.Error;
case 'Warning': case 'warning':
return LoggingLevel.Warning; return LoggingLevel.Warning;
case 'Info': case 'info':
return LoggingLevel.Info; return LoggingLevel.Info;
case 'Debug': case 'debug':
return LoggingLevel.Debug; return LoggingLevel.Debug;
case 'Trace': case 'trace':
return LoggingLevel.Trace; return LoggingLevel.Trace;
case 'All': case 'all':
return LoggingLevel.All; return LoggingLevel.All;
default: default:
throw new Error(`[LoggingLevelMapping] Received unknown logging level type [${level}]`); throw new Error(`[LoggingLevelMapping] Received unknown logging level type [${level}]`);

View File

@@ -1,4 +1,4 @@
import {LoggingLevel, LoggingLevelMapping, type LoggingLevelType} from './LoggingLevel'; import {LoggingLevel} from './LoggingLevel';
export class Threshold { export class Threshold {
private readonly _level: {value: LoggingLevel}; private readonly _level: {value: LoggingLevel};

View File

@@ -1,25 +1,19 @@
import PCastAPI from '@techniker-me/pcast-api'; import LoggerFactory from '../logger/LoggerFactory';
import RtmpPush from '@technniker-me/rtmp-push';
import CommandLine from '../config/CommandLine'; import CommandLine from '../config/CommandLine';
import { CommandLineOptions } from '../config/CommandLine';
interface CommandLineOptions { export default class TestRunner {
applicationId: string; private static readonly _logger = LoggerFactory.getLogger('TestRunner');
secret: string;
logLevel: string;
}
class TestRunner {
private static readonly _commandLineOptions: CommandLineOptions = CommandLine.parse(process.argv); private static readonly _commandLineOptions: CommandLineOptions = CommandLine.parse(process.argv);
public static main(): void { static {
const testRunner = new TestRunner(); TestRunner.run();
testRunner.run();
} }
public run(): void { public static run(): void {
console.log(TestRunner._commandLineOptions); LoggerFactory.setLoggingLevel(TestRunner._commandLineOptions.logLevel);
TestRunner._logger.info('TestRunner started');
TestRunner._logger.info(JSON.stringify(TestRunner._commandLineOptions, null, 2));
} }
} }
TestRunner.main();