【问题标题】:Background Application in AppHarbor and LogentriesAppHarbor 和 Logentries 中的后台应用程序
【发布时间】:2013-11-04 20:54:49
【问题描述】:

现在我在 AppHarbor 中有一个 Web 应用程序和 3 个后台应用程序。 我想使用 logentries 将每个应用程序记录在不同的位置。 基于 AppHarbor https://logentries.com/doc/appharbor/ 的 logentries 文档,令牌密钥是从 appharbor 强制执行的 web.config 和 app.config [配置变量] 中读取的。

如何配置每个应用程序以登录不同的日志位置(例如 Appharbor/Website、AppHarbor/Console1、AppHarbor/Console2)?

【问题讨论】:

    标签: backgroundworker appharbor logentries


    【解决方案1】:

    您可以通过在 appender/target 定义中指定 Token 来覆盖 AppHarbor 注入的配置变量。不确定您使用的是哪个框架,但如果是 NLog 则 你的 web/app.config 中有这一行

    <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}"/>

    添加 token="abc" 这样你就有了:

    <target name="logentries" type="Logentries" debug="true" token="abc" layout="${date:format=ddd MMM dd} ${time:format=HH:mm:ss} ${date:format=zzz yyyy} ${logger} : ${LEVEL}, ${message}"/>

    然后,如果您使用的是 log4net 插件,那么您有此部分:

    <appender name="LeAppender" type="log4net.Appender.LogentriesAppender, LogentriesLog4net"> <Debug value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d{ddd MMM dd HH:mm:ss zzz yyyy} %logger %: %level%, %m" /> </layout> </appender>

    添加,这样你就有了:

    <appender name="LeAppender" type="log4net.Appender.LogentriesAppender, LogentriesLog4net"> <Debug value="true" /> <Token value="abc" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d{ddd MMM dd HH:mm:ss zzz yyyy} %logger %: %level%, %m" /> </layout> </appender>

    此处设置的令牌值将优先于 Appharbor 注入的值,因此对于具有自己 web/app.config 的每个应用程序,您可以使用此方法输入自己的令牌。

    【讨论】:

    • 它工作得很好,但我可以让单个应用程序使用多令牌登录吗?例如:我在 logentries 中有 5 个位置,每个位置都有自己的令牌,我想从单个应用程序或 webapp 登录到这些位置
    • 我可以考虑扩展库以具有此功能,但我想这需要一些逻辑,您有用于确定哪些日志事件去哪里的逻辑示例吗?
    【解决方案2】:

    我发现我可以通过以下几行在运行时设置令牌:

    private static readonly ILog log = log4net.LogManager.GetLogger(typeof(Program));
    
    appender = (LogentriesAppender)log.Logger.Repository.GetAppenders()[0];
    appender.Token = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
    
    //now log method will use my token 
    log.Info("Hello World");
    

    【讨论】:

    • 请记住,当后台线程轮询队列并将它们发送出去时,该库使用一个队列,日志消息被推送到该队列中,但当前令牌在它们被拉出后被添加到消息的前缀从队列中,如果您更改令牌认为它只会影响您在该点之后记录的消息,这可能会导致某种竞争条件。让我看看在推送到队列之前为令牌添加前缀是否有任何缺点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    相关资源
    最近更新 更多