mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-04-18 05:39:05 +02:00
refactor(api): Central Logging 📜 (#1348)
* WIP: initial logging changes add several transports in ~/config/winston omit messages in logs, truncate long strings add short blurb in dotenv for debug logging GoogleClient: using logger OpenAIClient: using logger, handleOpenAIErrors Adding typedef for payload message bumped winston and using winston-daily-rotate-file moved config for server paths to ~/config dir Added `DEBUG_LOGGING=true` to .env.example * WIP: Refactor logging statements in code * WIP: Refactor logging statements and import configurations * WIP: Refactor logging statements and import configurations * refactor: broadcast Redis initialization message with `info` not `debug` * refactor: complete Refactor logging statements and import configurations * chore: delete unused tools * fix: circular dependencies due to accessing logger * refactor(handleText): handle booleans and write tests * refactor: redact sensitive values, better formatting * chore: improve log formatting, avoid passing strings to 2nd arg * fix(ci): fix jest tests due to logger changes * refactor(getAvailablePluginsController): cache plugins as they are static and avoids async addOpenAPISpecs call every time * chore: update docs * chore: update docs * chore: create separate meiliSync logger, clean up logs to avoid being unnecessarily verbose * chore: spread objects where they are commonly logged to allow string truncation * chore: improve error log formatting
This commit is contained in:
parent
49571ac635
commit
ea1dd59ef4
115 changed files with 1271 additions and 1001 deletions
|
|
@ -1,5 +1,6 @@
|
|||
const { Strategy: DiscordStrategy } = require('passport-discord');
|
||||
const User = require('../models/User');
|
||||
const { logger } = require('~/config');
|
||||
const User = require('~/models/User');
|
||||
|
||||
const discordLogin = async (accessToken, refreshToken, profile, cb) => {
|
||||
try {
|
||||
|
|
@ -40,7 +41,7 @@ const discordLogin = async (accessToken, refreshToken, profile, cb) => {
|
|||
message: 'User not found.',
|
||||
});
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
logger.error('[discordLogin]', err);
|
||||
return cb(err);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
const FacebookStrategy = require('passport-facebook').Strategy;
|
||||
const User = require('../models/User');
|
||||
const { logger } = require('~/config');
|
||||
const User = require('~/models/User');
|
||||
|
||||
const facebookLogin = async (accessToken, refreshToken, profile, cb) => {
|
||||
try {
|
||||
|
|
@ -32,7 +33,7 @@ const facebookLogin = async (accessToken, refreshToken, profile, cb) => {
|
|||
message: 'User not found.',
|
||||
});
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
logger.error('[facebookLogin]', err);
|
||||
return cb(err);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
const { Strategy: GitHubStrategy } = require('passport-github2');
|
||||
const User = require('../models/User');
|
||||
const { logger } = require('~/config');
|
||||
const User = require('~/models/User');
|
||||
|
||||
const githubLogin = async (accessToken, refreshToken, profile, cb) => {
|
||||
try {
|
||||
|
|
@ -29,7 +30,7 @@ const githubLogin = async (accessToken, refreshToken, profile, cb) => {
|
|||
|
||||
return cb(null, false, { message: 'User not found.' });
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
logger.error('[githubLogin]', err);
|
||||
return cb(err);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
const { Strategy: GoogleStrategy } = require('passport-google-oauth20');
|
||||
const User = require('../models/User');
|
||||
const { logger } = require('~/config');
|
||||
const User = require('~/models/User');
|
||||
|
||||
const googleLogin = async (accessToken, refreshToken, profile, cb) => {
|
||||
try {
|
||||
|
|
@ -29,7 +30,7 @@ const googleLogin = async (accessToken, refreshToken, profile, cb) => {
|
|||
|
||||
return cb(null, false, { message: 'User not found.' });
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
logger.error('[googleLogin]', err);
|
||||
return cb(err);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
/* const jose = require('jose');
|
||||
* No longer using this strategy as Bun now supports JWTs natively.
|
||||
/*
|
||||
const jose = require('jose');
|
||||
const { logger } = require('~/config');
|
||||
// No longer using this strategy as Bun now supports JWTs natively.
|
||||
|
||||
const passportCustom = require('passport-custom');
|
||||
const CustomStrategy = passportCustom.Strategy;
|
||||
const User = require('../models/User');
|
||||
const User = require('~/models/User');
|
||||
|
||||
const joseLogin = async () =>
|
||||
new CustomStrategy(async (req, done) => {
|
||||
|
|
@ -23,15 +25,15 @@ const joseLogin = async () =>
|
|||
if (user) {
|
||||
done(null, user);
|
||||
} else {
|
||||
console.log('JoseJwtStrategy => no user found');
|
||||
logger.debug('JoseJwtStrategy => no user found');
|
||||
done(null, false, { message: 'No user found' });
|
||||
}
|
||||
} catch (err) {
|
||||
if (err?.code === 'ERR_JWT_EXPIRED') {
|
||||
console.error('JoseJwtStrategy => token expired');
|
||||
logger.error('JoseJwtStrategy => token expired');
|
||||
} else {
|
||||
console.error('JoseJwtStrategy => error');
|
||||
console.error(err);
|
||||
logger.error('JoseJwtStrategy => error');
|
||||
logger.error(err);
|
||||
}
|
||||
done(null, false, { message: 'Invalid token' });
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
const { Strategy: JwtStrategy, ExtractJwt } = require('passport-jwt');
|
||||
const User = require('../models/User');
|
||||
const { logger } = require('~/config');
|
||||
const User = require('~/models/User');
|
||||
|
||||
// JWT strategy
|
||||
const jwtLogin = async () =>
|
||||
|
|
@ -10,11 +11,11 @@ const jwtLogin = async () =>
|
|||
},
|
||||
async (payload, done) => {
|
||||
try {
|
||||
const user = await User.findById(payload.id);
|
||||
const user = await User.findById(payload?.id);
|
||||
if (user) {
|
||||
done(null, user);
|
||||
} else {
|
||||
console.log('JwtStrategy => no user found');
|
||||
logger.warn('[jwtLogin] JwtStrategy => no user found: ' + payload?.id);
|
||||
done(null, false);
|
||||
}
|
||||
} catch (err) {
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
const passport = require('passport');
|
||||
const { Issuer, Strategy: OpenIDStrategy } = require('openid-client');
|
||||
const axios = require('axios');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const User = require('../models/User');
|
||||
const axios = require('axios');
|
||||
const passport = require('passport');
|
||||
const { Issuer, Strategy: OpenIDStrategy } = require('openid-client');
|
||||
const { logger } = require('~/config');
|
||||
const User = require('~/models/User');
|
||||
|
||||
let crypto;
|
||||
try {
|
||||
crypto = require('node:crypto');
|
||||
} catch (err) {
|
||||
console.error('crypto support is disabled!');
|
||||
logger.error('[openidStrategy] crypto support is disabled!', err);
|
||||
}
|
||||
|
||||
const downloadImage = async (url, imagePath, accessToken) => {
|
||||
|
|
@ -29,7 +29,9 @@ const downloadImage = async (url, imagePath, accessToken) => {
|
|||
|
||||
return `/images/openid/${fileName}`;
|
||||
} catch (error) {
|
||||
console.error(`Error downloading image at URL "${url}": ${error}`);
|
||||
logger.error(
|
||||
`[openidStrategy] downloadImage: Error downloading image at URL "${url}": ${error}`,
|
||||
);
|
||||
return '';
|
||||
}
|
||||
};
|
||||
|
|
@ -130,7 +132,7 @@ async function setupOpenId() {
|
|||
|
||||
passport.use('openid', openidLogin);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
logger.error('[openidStrategy]', err);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue