LogEntriesのドキュメントによると、アカウントキーはWeb.configファイルに入力する必要があります。同時に、AppHarbor構成変数に存在します。ハードコードされた値を使用する代わりに、構成変数から値を読み取ることはできますか?
質問する
539 次
3 に答える
2
構成を手動で追加する必要はありません。AppHarborは関連する値を自動的に挿入します。ローカルマシンでテストするときにLogEntriesを使用する場合は、AppHarborからコピーした構成を指定する必要があることに注意してください。
于 2012-04-03T22:49:09.430 に答える
1
le_nlogパッケージは、過去数日間にweb.configからappharborに挿入された構成変数を取得するための適切なコードで更新されたため、nugetをインストールして、アドオンをアプリに追加できます。手動で何も編集せずに移動します。もちろん、ローカルマシンからログを記録する場合に上記で指摘した場合を除き、この場合、構成変数は、現在web.config.transformに含まれているappSettingsセクションのweb.configに貼り付ける必要があります。 le_nlogパッケージ
于 2012-04-08T21:43:13.837 に答える
0
le_nlogパッケージのクラスの代わりに、このクラスを使用してください。また、構成でアセンブリを変更します。
<nlog>
<extensions>
<add assembly="MyAssembly"/>
</extensions>
<targets>
<target name="logentries" type="Logentries" debug="true" layout="${date:format=ddd MMM dd} ${time:format=HH:mm:ss} ${date:format=zzz yyyy} ${logger} : ${LEVEL}, ${message}, ${exception:format=tostring}" />
</targets>
<rules>
<logger name="*" minLevel="Info" appendTo="logentries" />
</rules>
/*
Logentries Log4Net Logging agent
Copyright 2010,2011 Logentries, Jlizard
Mark Lacomber <marklacomber@gmail.com>
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Security;
using System.Net.Sockets;
using System.IO;
using NLog;
using NLog.Common;
using NLog.Config;
using NLog.Internal;
using NLog.Internal.NetworkSenders;
using NLog.Layouts;
using NLog.Targets;
namespace Le
{
[Target("Logentries")]
public sealed class LeTarget : TargetWithLayout
{
private SslStream sslSock = null;
private TcpClient leSocket = null;
private System.Text.UTF8Encoding encoding;
public LeTarget()
{
}
string GetKey()
{
return ConfigurationManager.AppSettings["LOGENTRIES_ACCOUNT_KEY"];
}
string GetLocation()
{
return ConfigurationManager.AppSettings["LOGENTRIES_LOCATION"];
}
[RequiredParameter]
public bool Debug { get; set; }
public bool KeepConnection { get; set; }
private void createSocket(String key, String location)
{
this.leSocket = new TcpClient("api.logentries.com", 443);
this.leSocket.NoDelay = true;
this.sslSock = new SslStream(this.leSocket.GetStream());
this.encoding = new System.Text.UTF8Encoding();
this.sslSock.AuthenticateAsClient("logentries.com");
String output = "PUT /" + key + "/hosts/" + location + "/?realtime=1 HTTP/1.1\r\n";
this.sslSock.Write(this.encoding.GetBytes(output), 0, output.Length);
output = "Host: api.logentries.com\r\n";
this.sslSock.Write(this.encoding.GetBytes(output), 0, output.Length);
output = "Accept-Encoding: identity\r\n";
this.sslSock.Write(this.encoding.GetBytes(output), 0, output.Length);
output = "Transfer_Encoding: chunked\r\n\r\n";
this.sslSock.Write(this.encoding.GetBytes(output), 0, output.Length);
}
private byte[] GetBytesToWrite(LogEventInfo logEvent)
{
string text = this.Layout.Render(logEvent) + "\r\n";
return this.encoding.GetBytes(text);
}
protected override void Write(LogEventInfo logEvent)
{
if (this.sslSock == null)
{
try
{
this.createSocket(this.GetKey(), this.GetLocation());
}
catch (Exception e)
{
WriteDebugMessages("Error connecting to Logentries", e);
}
}
byte[] message = this.GetBytesToWrite(logEvent);
try
{
this.sendToLogentries(message);
}
catch (Exception)
{
try
{
this.createSocket(this.GetKey(), this.GetLocation());
this.sendToLogentries(message);
}
catch (Exception ex)
{
WriteDebugMessages("Error sending log to Logentries", ex);
}
}
}
private void sendToLogentries(byte[] message)
{
this.sslSock.Write(message, 0, message.Length);
}
private void WriteDebugMessages(string message, Exception e)
{
if (!this.Debug) return;
string[] messages = { message, e.ToString() };
foreach (var msg in messages)
{
System.Diagnostics.Debug.WriteLine(msg);
Console.Error.WriteLine(msg);
}
}
}
}
于 2012-04-04T03:49:56.877 に答える