Naplózó mechanizmus

Rendszernapló
Kommunikáció napló

Rendszernapló

Az OTRS egy olyan rendszernaplózó háttérprogrammal érkezik, amely használható az alkalmazás naplózásánál és a hibakeresésnél.

A Log objektum az ObjectManager modulon keresztül érhető el és használható ehhez hasonlóan:

$Kernel::OM->Get('Kernel::System::Log')->Log(
    Priority => 'error',
    Message  => 'Valamire szükség van!',
);
            

A rendszerbeállításokban a MinimumLogLevel beállításon keresztül beállított naplózási szinttől függően a naplózott üzenetek a Prioritás jelzőjük alapján mentésre kerülnek vagy sem.

Ha error van beállítva, akkor csak a hibák lesznek naplózva. A debug értékkel megkapja az összes naplózási üzenetet. A naplózási szintek sorrendje a következő:

  • debug

  • info

  • notice

  • error

A rendszernapló kimenete a rendszerbeállításokban lévő LogModule beállításban megadottak alapján átirányítható egy rendszernaplózó démonba vagy naplófájlba.

Kommunikáció napló

A rendszernapló mellett az OTRS különleges naplózó háttérprogramot biztosít az összes, a kommunikációra vonatkozó naplózáshoz. Az OTRS 6 óta a rendszer dedikált táblázatokkal és előtétprogramokkal érkezik a kommunikációs naplók követéséhez és megjelenítéséhez, hogy egyszerűbb legyen hibát keresni és a működést áttekinteni.

Az új rendszer előnyeinek kihasználásához először hozzon létre egy nem egyke példányt a kommunikációs napló objektumból:

my $CommunicationLogObject = $Kernel::OM->Create(
    'Kernel::System::CommunicationLog',
    ObjectParams => {
        Transport   => 'Email',     # Átviteli naplózó modul
        Direction   => 'Incoming',  # Incoming|Outgoing
        AccountType => 'POP3',      # Levelezési fiók típusa
        AccountID   => 1,           # Levelezési fiók azonosítója
    },
);
            

Amikor megvan a kommunikációs napló objektum példánya, akkor elindíthat egy objektumnaplózást az egyéni üzenetek naplózásához. Jelenleg két objektumnapló van megvalósítva: Connection és Message.

A Connection objektumnaplót kell használni minden, a kommunikációra vonatkozó üzenet naplózásához (például hitelesítés egy kiszolgálón vagy bejövő üzenetek fogadása).

Egyszerűen indítsa el az objektumnaplót a típusának meghatározásával, és már azonnal használhatja:

$CommunicationLogObject->ObjectLogStart(
    ObjectLogType => 'Connection',
);

$CommunicationLogObject->ObjectLog(
    ObjectLogType => 'Connection',
    Priority      => 'Debug',                              # Trace, Debug, Info, Notice, Warning vagy Error
    Key           => 'Kernel::System::MailAccount::POP3',
    Value         => "Kapcsolat nyitása ehhez: 'host.example.com' (user-1).",
);
            

A kommunikációs napló objektum példánya kezeli a jelenleg elindított objektumnaplókat, így nem kell megjegyeznie és előhoznia mindenhol, de ez azt is jelenti, hogy csak egyetlen objektumot indíthat típusonként.

Ha javíthatatlan hibával találkozik, akkor választhatja az objektumnapló bezárását és sikertelenként való megjelölését:

$CommunicationLogObject->ObjectLog(
    ObjectLogType => 'Connection',
    Priority      => 'Error',
    Key           => 'Kernel::System::MailAccount::POP3',
    Value         => 'Valami nem működik!',
);

$CommunicationLogObject->ObjectLogStop(
    ObjectLogType => 'Connection',
    Status        => 'Failed',
);
            

Viszont megjelölheti a kommunikációs naplót sikertelennek is:

$CommunicationLogObject->CommunicationStop(
    Status => 'Failed',
);
            

Egyébként állítsa le az objektumnaplót és jelölje a kommunikációs naplót sikeresként:

$CommunicationLogObject->ObjectLog(
    ObjectLogType => 'Connection',
    Priority      => 'Debug',
    Key           => 'Kernel::System::MailAccount::POP3',
    Value         => "A(z) 'host.example.com' kapcsolata lezárva.",
);

$CommunicationLogObject->ObjectLogStop(
    ObjectLogType => 'Connection',
    Status        => 'Successful',
);

$CommunicationLogObject->CommunicationStop(
    Status => 'Successful',
);
            

A Message objektumnaplót kell használni minden olyan naplóbejegyzésnél, amelyek bizonyos üzenetek és azok feldolgozását érintik. Hasonló módon használható, egyszerűen győződjön meg arról, hogy elindította-e a használta előtt:

$CommunicationLogObject->ObjectLogStart(
    ObjectLogType => 'Message',
);

$CommunicationLogObject->ObjectLog(
    ObjectLogType => 'Message',
    Priority      => 'Error',
    Key           => 'Kernel::System::MailAccount::POP3',
    Value         => "Nem sikerült feldolgozni az üzenetet. Nyers levél elmentve (jelentse a https://bugs.otrs.org/ oldalon)!",
);

$CommunicationLogObject->ObjectLogStop(
    ObjectLogType => 'Message',
    Status        => 'Failed',
);

$CommunicationLogObject->CommunicationStop(
    Status => 'Failed',
);
            

Lehetősége van hivatkozni a naplóobjektumra és később megkeresni a kommunikációkat egy bizonyos objektumtípus vagy azonosító esetén:

$CommunicationLogObject->ObjectLookupSet(
    ObjectLogType    => 'Message',
    TargetObjectType => 'Article',
    TargetObjectID   => 2,
);

my $LookupInfo = $CommunicationLogObject->ObjectLookupGet(
    TargetObjectType => 'Article',
    TargetObjectID   => 2,
);
            

Meg kell győződnie arról, hogy mindig leállította-e a kommunikációt és megjelölte-e sikertelenként, ha valamelyik naplóobjektum sikertelen lenne. Ez lehetővé fogja tenni az adminisztrátorok számára, hogy megtekintsék a sikertelen kommunikációkat az áttekintőben, és megtegyék a szükséges lépéseket.

Fontos megőrizni a kommunikációs naplót egyetlen folyamat időtartamára. Ha munkája több modult is érint, és bármelyikük kihasználhatja a naplózás előnyeit, akkor győződjön meg arról, hogy átadta-e a létező kommunikációs napló példányát, így az összes metódus ugyanazt tudja használni. Ezzel a megközelítéssel biztosíthatja, hogy az azonos folyamathoz tartozó naplóbejegyzések egyetlen kommunikációban legyenek tárolva.

Ha a kommunikációs napló példányának átadása nem lehetséges (aszinkron feladatok!), akkor választhatja a kommunikációs napló objektum újra létrehozását ugyanabban az állapotban, amiben az előző lépésben volt. Egyszerűen fogja a kommunikációs azonosítót, és adja át az új kódnak, majd hozza létre az új példányt ezzel a megadott paraméterrel:

# Kommunikációs azonosító lekérése a szülőkódban.
my $CommunicationID = $CommunicationLogObject->CommunicationIDGet();

# Valahogy adja át a kommunikációs azonosítót a gyermekkódnak.
# ...

# A példány újra létrehozása a gyermekkódban ugyanazon kommunikációs azonosító használatával.
my $CommunicationLogObject = $Kernel::OM->Create(
    'Kernel::System::CommunicationLog',
    ObjectParams => {
        CommunicationID => $CommunicationID,
    },
);
            

Ezután folytathatja ennek a példánynak a használatát, amint azt korábban említettük. Indítson el valamilyen objektumnaplót, ha szükséges, adjon hozzá bejegyzéseket és állítsa be az állapotot a végén.

Ha a kommunikációs napló adatainak lekérésére van szüksége vagy valami mást szeretne csinálni vele, akkor vessen egy pillantást a Kernel::System::CommunicationLog::DB.pm fájlra.