ログチャンネルを使用してログを出力する[Verse]

以下の内容はフォートナイトv31.20に基づいてます。

目次

参考サイト

ログを設定して出力する

log_channelクラスを継承したクラスを作成する

今回はクラス名を「log_test」としている。

using { /UnrealEngine.com/Temporary/Diagnostics }

log_test := class(log_channel):

logクラスのインスタンスを作成する

Channelは作成した「log_test」を、DefaultLevelは「Error」にしている。

log_test_print := class(creative_device):

    Logger:log = log{Channel := log_test, DefaultLevel := log_level.Error}

ログを出力する

log_levelは5種類(Debug/Verbose/Normal/Warning/Error)あるので設定無しの場合とそれぞれを出力する。

    OnBegin<override>()<suspends>:void=
        Logger.Print("Test Default Log")
        Logger.Print("Test Debug Log", ?Level := log_level.Debug)
        Logger.Print("Test Verbose Log", ?Level := log_level.Verbose)
        Logger.Print("Test Normal Log", ?Level := log_level.Normal)
        Logger.Print("Test Warning Log", ?Level := log_level.Warning)
        Logger.Print("Test Error Log", ?Level := log_level.Error)

ゲーム内で出力されたログ

まず先頭に今回作成したクラス名「log_test」が出力されている。

その後ろにlog_levelが表示(Normal以外)され、その後に設定したメッセージが出力されている。

log_levelを設定していない場合はDefaultLevelとして設定したErrorになっている。

エディタ内で出力されたログ

先頭にlog_levelが表示(Normal以外)されている。

その後ろに今回作成したクラス名「log_test」、その後に設定したメッセージが出力されている。

log_levelがNormalの文字色は白だが、Warningだと黄、Errorだと赤になっている。

log_levelがDebugとVerboseについてはエディタでは出力されなかった。

ログのフィルタ

エディタの出力ログはいろいろとフィルタリングできるので、これと組み合わせると見やすくなりそう。

UnrealEngine.digest.verseの該当部分

        # log levels available for various log commands
        log_level<native><public> := enum:
            Debug
            Verbose
            Normal
            Warning
            Error

        # log_channel is the base class used to define log channels. When printing a message to a log, the log channel class name will be prefixed to the output message.
        log_channel<native><public> := class<abstract>:

        # log class to send messages to the default log
        log<native><public> := class:
            # Channel class name will be added as a prefix used when printing the message e.g. '[log_channel]: #Message
            Channel<native><public>:subtype(log_channel)

            # Sets the default log level of the displayed message. See log_level enum for more info on log levels. Defaults to log_level.Normal.
            DefaultLevel<native><public>:log_level = external {}

            # Print message using the given log level
            (log:)Print<native><public>(Message:string, ?Level:log_level = external {})<computes>:void

            # Prints current script call stack using the give log level
            PrintCallStack<native><public>(?Level:log_level = external {})<computes>:void

今回のコード

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

log_test := class(log_channel):

log_test_print := class(creative_device):

    Logger:log = log{Channel := log_test, DefaultLevel := log_level.Error}

    OnBegin<override>()<suspends>:void=
        Logger.Print("Test Default Log")
        Logger.Print("Test Debug Log", ?Level := log_level.Debug)
        Logger.Print("Test Verbose Log", ?Level := log_level.Verbose)
        Logger.Print("Test Normal Log", ?Level := log_level.Normal)
        Logger.Print("Test Warning Log", ?Level := log_level.Warning)
        Logger.Print("Test Error Log", ?Level := log_level.Error)

プロジェクトのどこからでも使えるログ出力クラス

独立した関数のような通常のログ機能を使えない場所からでもログを出力するためのクラス。

公式コミュニティのスニペットに上がっていたのでありがたく使わせていただきます。

using { /UnrealEngine.com/Temporary/Diagnostics }

my_log_channel<public> := class(log_channel):
 
# A project-wide "Logger" to print messages from functions that are not in a class with a log.
# The non-Logger Print is <no_rollback>, so it can't be used in a <transacts> function.
ProjectLog<public>(Message:[]char, ?Level:log_level = log_level.Normal)<transacts>:void=
    Logger := log{Channel := my_log_channel}
    Logger.Print(Message, ?Level := Level)
# Usage:
ProjectLog("EndGame: Player has won!", ?Level := log_level.Verbose)
    
# You don't have to specify the Level
ProjectLog("Hello Verse!")

コメント

コメントする

目次