Official Content

The Log external object allows you to write messages in the log system on different levels that will go to different streams.

Logexternalobject-Location_png image_2018613135750_1_png

Properties

Does not have any.

Methods

All of them allow you to indicate a "topic" value with the meaning of the data written.

Write method

Writes a message in the log; optionally, you can indicate a topic and the desired log level.

Return value None
Parameters Message:VarChar(1000) [ topic:VarChar(40) , logLevel:GeneXus.Common.LogLevel ]

Fatal method

Writes a fatal message in the log (through the errors flow channel).

Return value None
Parameters Message:VarChar(1000) [ topic:VarChar(40) ]

Error method

Writes an error message in the log (through the errors flow channel).

Return value None
Parameters Message:VarChar(1000) [ topic:VarChar(40) ]

Warning method

Writes a warning message in the log (through the warnings flow channel).

Return value None
Parameters Message:VarChar(1000) [ topic:VarChar(40) ]

Info method

Writes an info message in the log (through the info flow channel).

Return value None
Parameters Message:VarChar(1000) [ topic:VarChar(40) ]

Debug method

Writes a debug message in the log (through the debug flow channel).

Return value None
Parameters Message:VarChar(1000) [ topic:VarChar(40) ]

Note: If you pass a Topic that begins with $, the log message literally takes what follows the dollar sign as the topic. Otherwise, the topic will be the concatenation of the string "GeneXusUserLog" followed by the topic you passed as a parameter: GeneXusUserLog.

You can also change the "GeneXusUserLog" string for something else, defining an environment variable named USER_LOG_NAMESPACE.

Events

Does not have any.

Domains

LogLevel domain

Enumerated domain with the available log levels. In order of significance:

FATAL Fatal level
ERROR Error level
WARNING Warning level
INFO Informational level
DEBUG Debug level
OFF Log disabled

Samples

Native Mobile

Suppose you have the Default Log Level property set to "Warning" and the following code in a client event:

Event 'Test'
    Composite
        Log.Debug(!"Debug message",!"MyCompany.Test.TestSDLoggingDebug")
        Log.Info(!"Info message",!"MyCompany.Test.TestSDLoggingInfo")
        Log.Warning(!"Warning message",!"MyCompany.Test.TestSDLoggingWarning")
        Log.Error(!"Error message",!"MyCompany.Test.TestSDLoggingError")
    EndComposite
Endevent

Then, in Android's LogCat, you will see the following messages (refer to HowTo: Enable logging for Native Mobile).

Log external object - Android example

Note that it only displays Warning and Error messages due to the Log Level property. Other messages are ignored (Debug and Info).

Note: Remember that log messages will be displayed on LogCat/XCode in online applications only when the Log external object is executed on client-side events. In this case, the Start, Refresh, and Load events will print the log depending on the server-side configuration (as shown in the example below).

Web

Suppose the User Log level property is set to "6.All" and the Log output property is set to "File". Then, if you write an event like this:

Event 'Test'
      Log.Write(!"Write message", !"MyCompany.Test.TestLoggingWrite",LogLEvel.DEBUG)
      Log.Debug(!"Debug message",!"MyCompany.Test.TestLoggingDebug")
      Log.Info(!"Info message",!"MyCompany.Test.TestLoggingInfo")
      Log.Warning(!"Warning message",!"MyCompany.Test.TestLoggingWarning")
      Log.Error(!"Error message",!"MyCompany.Test.TestLoggingError")
      Log.Fatal(!"Fatal message",!"MyCompany.Test.TestLoggingFatal")
Endevent

In the client.log file, you will see the following messages:

LogExternal Object - NetExample

Notes:

  • The following statements are equivalent:
    msg(&string,status)
    Log.Debug(&string)
    Log.Write(&string,"",LogLevel.DEBUG)
  • The topic by default is concatenated to a hardcoded string "GeneXusUserLog".

Scope

Generators: Apple, Android, .NET, .NET Framework, Java

Availability

This external object is available as of GeneXus 15 Upgrade 11

Best practices

When using Modules for sharing GeneXus' interfaces (e.g. an API), it is highly recommended to follow these guidelines.

  • Always include a log message on your operations, preferably in English and with no translation (using "!" notation, e.g. !"My log message") to simplify filters and searches.
  • Add a topic to each log message indicating which object produces the message. You can use the following convention:
    !"<Company>.<Module>.<Object>"
    For example:
    !"GeneXus.GeneXus.Common.Notifications.SendNotification"
    where GeneXus is the company, GeneXus.Common.Notifications is the module (from the root), and SendNotification is the object.
  • Use Log API instead of msg("<My message>",status)

See Also

HowTo: Enable logging for Native Mobile
Default Log Level property
Log level property
Download UILogging sample
Apple Developer - Debugging Tools
Android Developer - Write and View Logs with Logcat
HowTo: See trace information in applications hosted on .Net Cloud

Last update: November 2023 | © GeneXus. All rights reserved. GeneXus Powered by Globant