From fb9e5dcd10998571a3f4c61e274c231c18377028 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sun, 10 May 2026 16:52:25 +0200 Subject: [PATCH] =?UTF-8?q?feat(logger):=20Verbose-Logging-Toggle=20in=20S?= =?UTF-8?q?ettings=20=E2=86=92=20Protokoll?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit console.log wird global stummgeschaltet wenn aus — spart adb-logcat- Speicher wenn alles laeuft. console.warn/error bleiben immer aktiv. Default an. Co-Authored-By: Claude Opus 4.7 (1M context) --- android/App.tsx | 5 ++++ android/src/screens/SettingsScreen.tsx | 24 +++++++++++++++ android/src/services/logger.ts | 41 ++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 android/src/services/logger.ts diff --git a/android/App.tsx b/android/App.tsx index f78e5d0..e82cafe 100644 --- a/android/App.tsx +++ b/android/App.tsx @@ -13,6 +13,7 @@ import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; import ChatScreen from './src/screens/ChatScreen'; import SettingsScreen from './src/screens/SettingsScreen'; import rvs from './src/services/rvs'; +import { initLogger } from './src/services/logger'; // --- Navigation --- @@ -44,6 +45,10 @@ const TAB_ICONS: Record = { const App: React.FC = () => { // Beim Start: gespeicherte RVS-Konfiguration laden und verbinden useEffect(() => { + // Verbose-Logging-Setting laden BEVOR andere Module loslegen. + // initLogger ist async aber blockt nichts — solange er noch laueft, + // loggen wir normal (Default an), danach respektiert console.log das Setting. + initLogger().catch(() => {}); const initConnection = async () => { const config = await rvs.loadConfig(); if (config) { diff --git a/android/src/screens/SettingsScreen.tsx b/android/src/screens/SettingsScreen.tsx index b22da8d..3036160 100644 --- a/android/src/screens/SettingsScreen.tsx +++ b/android/src/screens/SettingsScreen.tsx @@ -51,6 +51,7 @@ import { TTS_SPEED_STORAGE_KEY, } from '../services/audio'; import audioService from '../services/audio'; +import { isVerboseLogging, setVerboseLogging } from '../services/logger'; import { isWakeReadySoundEnabled, setWakeReadySoundEnabled, @@ -137,6 +138,7 @@ const SettingsScreen: React.FC = () => { const [showVadInfo, setShowVadInfo] = useState(false); const [apkCacheInfo, setApkCacheInfo] = useState<{count: number, totalMB: number} | null>(null); const [ttsCacheInfo, setTtsCacheInfo] = useState<{count: number, totalMB: number} | null>(null); + const [verboseLogging, setVerboseLoggingState] = useState(isVerboseLogging()); const [ttsSpeed, setTtsSpeed] = useState(TTS_SPEED_DEFAULT); const [wakeKeyword, setWakeKeyword] = useState(DEFAULT_KEYWORD); const [wakeStatus, setWakeStatus] = useState(''); @@ -1291,6 +1293,28 @@ const SettingsScreen: React.FC = () => { {/* === Logs === */} {currentSection === 'protocol' && (<> Protokoll + + {/* Verbose-Logging-Toggle */} + + + Verbose Logging + { + setVerboseLogging(v); + setVerboseLoggingState(v); + }} + trackColor={{ false: '#3A3A52', true: '#0096FF' }} + thumbColor={verboseLogging ? '#FFFFFF' : '#666680'} + /> + + + Wenn aus: console.log wird global stummgeschaltet (Speicher schonen). + Warnungen und Fehler bleiben immer aktiv. Bei Bedarf einschalten zum + Debuggen via adb logcat. + + + {/* Tab-Umschalter */} diff --git a/android/src/services/logger.ts b/android/src/services/logger.ts new file mode 100644 index 0000000..4610ee2 --- /dev/null +++ b/android/src/services/logger.ts @@ -0,0 +1,41 @@ +/** + * Verbose-Logging-Toggle: console.log laesst sich global stummschalten. + * console.warn/console.error bleiben immer an — Fehler will man immer sehen. + * + * Default: an (true). Toggle ueber Settings → Protokoll → Verbose Logging. + * Beim Start wird der gespeicherte Wert geladen, vorher loggen wir normal. + */ + +import AsyncStorage from '@react-native-async-storage/async-storage'; + +export const VERBOSE_LOGGING_KEY = 'aria_verbose_logging'; + +// Original-console.log retten, damit wir die Wrapper jederzeit wieder +// "scharf" stellen koennen (sonst waere ein Toggle-an nach -aus tot). +const originalLog = console.log.bind(console); +const noop = () => {}; + +let _verbose = true; + +function applyState(): void { + console.log = _verbose ? originalLog : noop; +} + +/** Wert aus AsyncStorage laden und anwenden. Beim App-Start aufrufen. */ +export async function initLogger(): Promise { + try { + const v = await AsyncStorage.getItem(VERBOSE_LOGGING_KEY); + _verbose = v !== 'false'; // default: true + } catch {} + applyState(); +} + +export function isVerboseLogging(): boolean { + return _verbose; +} + +export function setVerboseLogging(verbose: boolean): void { + _verbose = verbose; + applyState(); + AsyncStorage.setItem(VERBOSE_LOGGING_KEY, String(verbose)).catch(() => {}); +}