Deze documentatie beschrijft hoe u logging configureert met uw AppSignal for Ruby-integratie.
🔐 Stuur geen Persoonlijk Identificeerbare Informatie (PII) naar AppSignal. Filter PII (bijv. namen, e-mailadressen) uit logs en gebruik in plaats daarvan een ID, hash of gepseudonimiseerde identificator.
Voor onder HIPAA vallende entiteiten vindt u meer informatie over het ondertekenen van een Business Associate Agreement (BAA) in onze documentatie over Business Add-Ons.
U hoeft geen logbron aan te maken om logs te versturen vanuit de AppSignal for Ruby-integratie. Er wordt automatisch een “application”-logbron aangemaakt.
Rails Logger
U kunt het Rails-framework configureren om logs naar AppSignal te sturen in een initializer-bestand zoals config/initializers/logging.rb:
# config/initializers/logging.rb
appsignal_logger = Appsignal::Logger.new("rails")
Rails.logger = ActiveSupport::TaggedLogging.new(appsignal_logger)
Meerdere logging-backends gebruiken
Om logs naar zowel de logger van AppSignal als de standaard logger van Rails te sturen, gebruikt u de .broadcast_to-helper van onze logger:
# config/initializers/logging.rb
appsignal_logger = Appsignal::Logger.new("rails")
appsignal_logger.broadcast_to(Rails.logger)
Rails.logger = ActiveSupport::TaggedLogging.new(appsignal_logger)
Wij raden het gebruik van de ingebouwde broadcast logger-functie van Rails niet aan, vanwege compatibiliteitsproblemen bij gelijktijdig gebruik met tagged logging.
Ondersteuning voor tagged logging
Het gebruik van ActiveSupport::TaggedLogging in de bovenstaande voorbeelden maakt ondersteuning voor de log-tags van Rails mogelijk. Als u bijvoorbeeld de request ID-tag aan de logberichten wilt toevoegen, voegt u deze toe aan de config.log_tags-array in het bestand config/application.rb:
module TestApp
class Application < Rails::Application
config.log_tags = [:request_id]
end
end
Lograge gebruiken
Deze Lograge-configuratie is geen vervanging voor de Rails logger-
configuratie. Als u logs van Rails.logger wilt rapporteren, moeten ook de
Rails logger-configuratiestappen worden gevolgd.
De Lograge-bibliotheek is een populaire oplossing voor het opnemen van gestructureerde Rails-request-logs.
Nadat u de lograge-gem hebt toegevoegd, kunt u deze configureren in config/initializers/lograge.rb om logs naar AppSignal te sturen:
Rails.application.configure do
config.lograge.enabled = true
config.lograge.keep_original_rails_log = true
config.lograge.logger = Appsignal::Logger.new(
"rails",
format: Appsignal::Logger::LOGFMT
)
end
Lograge ondersteunt geen log-niveaus. Alle logs die via Lograge worden
uitgegeven, verschijnen met severity-niveau INFO in de AppSignal Logging-UI.
Sinatra Logger
U kunt Sinatra configureren om request-logs naar AppSignal te sturen met behulp van Rack’s CommonLogger-middleware. Configureer het zoals hieronder weergegeven.
Overweeg of request-logs nuttige informatie voor u bevatten, lees ons learning center-artikel welke logs moet ik opslaan.
logger = Appsignal::Logger.new("sinatra")
use Rack::CommonLogger, logger
Meerdere logging-backends gebruiken
Om logs naar zowel de logger van AppSignal als naar STDOUT te sturen, gebruikt u de .broadcast_to-helper van onze logger:
logger = Appsignal::Logger.new("sinatra")
logger.broadcast_to(Logger.new($stdout))
use Rack::CommonLogger, logger
Sidekiq Logger
U kunt Sidekiq configureren om zijn logs naar AppSignal te sturen, inclusief de logs die door uw achtergrondtaken worden uitgegeven:
Sidekiq.configure_server do |config|
config.logger = Appsignal::Logger.new("sidekiq")
config.logger.formatter = Sidekiq::Logger::Formatters::WithoutTimestamp.new
end
Meerdere logging-backends gebruiken
Om logs naar zowel de logger van AppSignal als naar STDOUT te sturen, gebruikt u de .broadcast_to-helper van onze logger:
Sidekiq.configure_server do |config|
config.logger = Appsignal::Logger.new("sidekiq")
config.logger.broadcast_to(Logger.new($stdout))
config.logger.formatter = Sidekiq::Logger::Formatters::WithoutTimestamp.new
end
Ruby Logger
Om logs naar AppSignal te sturen zoals u dat met de Logger-klasse van Ruby zou doen, moet u een instantie van Appsignal::Logger aanmaken en deze voorzien van een groupname die definieert vanwaar u logt. Bijvoorbeeld, als wij zouden loggen vanuit een helper voor het factureren van klanten:
logger = Appsignal::Logger.new("invoice_helper")
Meerdere logging-backends gebruiken
Om logs naar zowel de logger van AppSignal als naar STDOUT te sturen, gebruikt u de .broadcast_to-helper van onze logger:
logger = Appsignal::Logger.new("invoice_helper")
logger.broadcast_to(Logger.new($stdout))
Semantic Logger
De Semantic Logger-bibliotheek biedt een uitgebreide logging-oplossing voor Ruby- en Rails-applicaties.
Nadat u de semantic_logger-gem hebt toegevoegd, kunt u deze als volgt configureren om logs naar AppSignal te sturen:
appsignal_logger = Appsignal::Logger.new("rails", format: Appsignal::Logger::LOGFMT)
SemanticLogger.add_appender(logger: appsignal_logger, formatter: :logfmt)
Meerdere logging-backends gebruiken
Om logs naar zowel de logger van AppSignal als naar STDOUT te sturen, voegt u nog een appender toe met de methode add_appender:
appsignal_logger = Appsignal::Logger.new("rails", format: Appsignal::Logger::LOGFMT)
SemanticLogger.add_appender(logger: appsignal_logger, formatter: :logfmt)
SemanticLogger.add_appender(io: $stdout)
Gebruik
Logs versturen
Net als de Ruby/Rails Logger-klasse kunt u de severity-niveau van uw logs definiëren met fatal, error, warn, info en debug:
logger.warn("Something went wrong")
U kunt aangepaste attributen definiëren om loginformatie te versturen die kan worden gebruikt bij het filteren en opvragen van logs:
logger = Appsignal::Logger.new("invoice_helper")
logger.info("Generating invoice for customer", { customer_id: @customer.id })
invoice = generate_invoice(@customer)
logger.info("Generated invoice for customer", { customer_id: @customer.id, invoice_id: invoice.id })
U kunt op berichtinhoud en attribuutwaarden filteren en opvragen met behulp van onze zoeksyntaxis.
Eenmaal geconfigureerd, worden de gewenste attributen als log-tags naar AppSignal verstuurd en zijn ze opvraagbaar in de AppSignal logging-interface.
Standaard logger-attributen
Bij het initialiseren van de AppSignal-logger kunt u standaardattributen verstrekken die in alle logberichten worden opgenomen:
logger = Appsignal::Logger.new("invoice_helper", attributes: { customer_id: @customer.id })
De attributen die bij het initialiseren van de logger worden verstrekt, worden opgenomen in alle logberichten die vanaf die logger-instantie worden verstuurd. Attributen die met het logbericht worden verstrekt, worden samengevoegd met de standaard logger-attributen.
logger = Appsignal::Logger.new("invoice_helper", attributes: { customer_id: @customer.id })
# This log message will contain the `customer_id` attribute:
logger.info("Generating invoice for customer")
invoice = generate_invoice(@customer)
# This log message will contain the `customer_id` and `invoice_id` attributes:
logger.info("Generated invoice for customer", { invoice_id: invoice.id })
Wanneer zowel de logger als het logbericht hetzelfde attribuut verstrekken, overschrijft het attribuut van het logbericht het standaard logger-attribuut.
De AppSignal for Ruby-gem detecteert het formaat van de logregel standaard automatisch als JSON, Logfmt of plaintext en parseert er attributen uit.
U hoeft het logformaat niet handmatig in te stellen, tenzij het niet correct wordt gedetecteerd.
Laat het ons ook weten als dit niet automatisch werkt.
logger = Appsignal::Logger.new("group")
# Plaintext format
logger.info("This is about the blog")
# Logfmt format
logger.info("category=blog This is about the blog")
# JSON format
logger.info('{"category": "blog", "message": "This is about the blog"}')
Logfmt
De AppSignal Logger kan expliciet worden geconfigureerd om te verwachten dat de regel in Logfmt-formaat is en hier attributen uit te parsen.
Gebruik deze optie wanneer u een oudere versie van de AppSignal for Ruby-gem gebruikt die geen automatische formaatdetectie ondersteunt.
Het logformaat kan worden opgegeven bij het aanmaken van een logger.
Geef bij het initialiseren van de AppSignal-logger de Logfmt-constante door in de format-optie.
logger = Appsignal::Logger.new("group", format: Appsignal::Logger::LOGFMT)
logger.info("category=blog This is about the blog")
In het bovenstaande voorbeeld wordt een filterbaar category-attribuut met de waarde “blog” gelogd.
JSON
De AppSignal Logger kan expliciet worden geconfigureerd om te verwachten dat de regel in JSON-formaat is en hier attributen uit te parsen.
Gebruik deze optie wanneer u een oudere versie van de AppSignal for Ruby-gem gebruikt die geen automatische formaatdetectie ondersteunt.
Het logformaat kan worden opgegeven bij het aanmaken van een logger.
Geef bij het initialiseren van de AppSignal-logger de JSON-constante door in de format-optie.
logger = Appsignal::Logger.new("group", format: Appsignal::Logger::JSON)
logger.info('{"category": "blog", "message": "This is about the blog"}')
In het bovenstaande voorbeeld wordt een filterbaar category-attribuut met de waarde “blog” gelogd.
Logs filteren
U kunt de configuratieoptie ignore_logs gebruiken om logregels te negeren. Zie onze gids Logs negeren voor meer informatie.
Hulp nodig?
Nadat u uw Ruby-applicatie hebt geconfigureerd om logs te versturen, zouden er logs in AppSignal moeten verschijnen. Als u twijfelt over deze stap of AppSignal geen logs ontvangt, kunt u altijd contact opnemen voor hulp. Wij helpen u graag weer op weg!