web-dev-qa-db-ja.com

C#コンソールアプリからAzure WebJobsのログに書き込むにはどうすればよいですか?

Azure Webjobsをテストしています。新しい作業のためにSQLデータベースをポーリングして処理するコンソールアプリケーションを作成しました。 Azure Storageのみをサポートするため、WebJobs SDKは使用していません。

ジョブをアップロードして実行すると、SQL Databaseインスタンスに接続できなかったという例外が発生して失敗します。どの接続文字列が使用されているのでしょうか。 Azure Webサイトから接続文字列を取得していますか。ログはこれを私に与えます:

[03/14/2014 22:24:25 > 512206: SYS INFO] Status changed to Running
[03/14/2014 22:24:40 > 512206: ERR ] 
[03/14/2014 22:24:40 > 512206: ERR ] Unhandled Exception: System.AggregateException: One or more errors occurred. ---> System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

これらのログにデータを書き込みたいです(使用されている接続文字列など)。 Console.WriteLine、Debug.WriteLine、Console.Error.WriteLineを試しました。それらはどれも私のWebJobログには表示されません。

どうやら、必要なものを示すメッセージテキストで例外を発生させるだけでデータを取得できたようですが、もっと良い方法があるはずです! SYS INFO行とERR行をログに書き込むにはどうすればよいですか?

50
Geoff Armstrong

ログについて:

continuous WebJobs-Console.OutおよびConsole.Errorは「アプリケーションログ」にルーティングされ、アプリケーションログの設定に応じて、ファイル、ブロブ、またはテーブルストレージとして表示されます(ウェブサイト)。

また、各呼び出しの最初の100行は、Azureポータルを使用してアクセス可能なWebJobログファイル(WebJobが起動時に失敗した場合のデバッグの痛みを軽減するため)にも移動します(ただし、サイトのファイルシステムのdata/jobs/continuous/jobName )。

triggered/scheduled WebJobs-Console.Out/Console.Errorは、Azureポータルを使用してアクセス可能なWebJobs固有の実行ログファイルにルーティングされ、data/jobs/triggered/jobName/runIdに保存されます。

Console.OutはINFOとして、Console.ErrorはERRORとして扱われます(マークされます)。

接続文字列に関して:

ConfigurationManagerクラスを使用して、Webサイトと同じように接続文字列にアクセスできます。NETで記述されていないWebJobsの場合、これらの接続文字列(およびアプリ設定)は環境変数(すべてWebサイトと同じ)として見つけることができます。

66
Amit Apple

Console.WriteLine()を取得して、Webジョブログにメッセージを残すことができました。次のコンソールが実行され、ログメッセージが残ります。

class Program
{
    static void Main(string[] args)
    {
        while (true)
        {
            DoStuff();
            Thread.Sleep(10000);
        }
    }

    public static void DoStuff()
    {
        Console.WriteLine("do stuff");
    }
}

これは私のログファイルが示すものです:

[03/15/2014 04:05:28 > cf6d00: SYS INFO] Run script 'HelloWebJobConsoleApplication.exe' with script Host - 'WindowsScriptHost'
[03/15/2014 04:05:28 > cf6d00: SYS INFO] Status changed to Running
[03/15/2014 04:05:28 > cf6d00: INFO] do stuff
[03/15/2014 04:05:38 > cf6d00: INFO] do stuff
[03/15/2014 04:05:48 > cf6d00: INFO] do stuff
[03/15/2014 04:05:58 > cf6d00: INFO] do stuff
6
reuben