# ログの発行

> Add custom logging statements to your Cloud Code scripts and modules to record debugging information.

[Cloud Code スクリプト](../../scripts/overview) と [モジュール](../../modules/overview) からログを発行できます。

## Cloud Code C# モジュール##cloud-code-c-modules

[`Microsoft.Extensions.Logging` ライブラリ](https://learn.microsoft.com/en-us/dotnet/core/extensions/logging?tabs=command-line) を使用して、[Cloud Code C# モジュール](../../modules/overview) からログを発行できます。Cloud Code は、[依存性注入](../../modules/how-to-guides/initialize-modules/dependency-injection) を通じて `ILogger` をリクエストするたびに、UGS Logger にコードを自動的に提供します。

以下のコードサンプルは、C# モジュールをインストルメント化するために行う必要があるすべてのことを示します。

```csharp
using Microsoft.Extensions.Logging;
using Unity.Services.CloudCode.Core;

namespace CloudCodeModules;

public class LoggingExample
{
    // Setting up the Dependency Injection. Cloud Code will inject a UGS Logger
    // into "_logger" which can then be used by all methods in this class
    private readonly ILogger<LoggingExample> _logger;
    public LoggingExample(ILogger<LoggingExample> logger)
    {
        _logger = logger;
    }

    [CloudCodeFunction("SayHello")]
    public string SayHello(IExecutionContext ctx, string name)
    {
        // Logging out a standard message
        _logger.LogDebug("received a request to SayHello");

        // Logging out a templated message. The template variable "name"
        // will be available as a key-value pair inside the log attributes map.
        // Templated keys cannot use dot notation for namespacing.
        _logger.LogInformation("saying hello to {name}", name);

        // A scope can be used to share sets of attributes between multiple log
        // entries. Attribute keys in a scope can use dot notation for namespacing
        // purposes.
        using (_logger.BeginScope(new Dictionary<string, object>
            {
                {"example.someInteger", 7 },
                {"example.someString", "frog blast the vent core!" }
            }))
        {
            _logger.LogInformation("logging within a scope");
            _logger.LogInformation("logging again with the same attributes");
        }

        return $"Hello, {name}!";
    }
}
```

## Cloud Code JavaScript スクリプト##cloud-code-javascript-scripts

スクリプトコンテキストの一部として自動的に提供されるデフォルトロガーを使用して、[Cloud Code JavaScript スクリプト](../../scripts/overview) からログを発行できます。

以下のコードサンプルは、JavaScript スクリプトをインストルメント化するために行う必要があるすべてのことを示します。

### JavaScript##javascript

```javascript
module.exports = async ({ params, context, logger }) => {
    logger.info("script executing", {"example.someString": "frog blast the vent core!"});
    logger.warning("this is a serious warning that the cheese is about to run out.");
    logger.error("out of cheese :(", {"example.foo": 42}, {"example.bar": 7});
};
```

ロガーでは以下のメソッドが提供されています。

* `debug(message, ...logAttributes)`
* `info(message, ...logAttributes)`
* `warning(message, ...logAttributes)`
* `error(message, ...logAttributes)`
* `fatal(message, ...logAttributes)`

### 制限##limits

呼び出しごとに複数のログ属性を渡すことができますが、以下の制限が適用されます。

* 各ログ属性は、単一のキー/値のペアを持つオブジェクトである必要があります。
* 値は空ではないプリミティブである必要があります (false ブーリアンが許可されます)。
