我的客户希望我使用.NET发布到Twitter,并建议我使用C#.
问:如何使用C#将"Hello World"发布到Twitter?
这篇文章提到了一个名为twitterizer的图书馆.没有使用第三方库,是不是有本地方法呢?(也许不是因为身份验证是其中一项要求).
刚刚开始尝试使用NLog,我发现我希望能够将头信息添加到日志文件的顶部,例如:
可执行文件名文件版本发布日期Windows用户ID等...
经过一些搜索后,我无法在现有的在线文档或代码论坛中找到任何表明此类功能的内容.这可能吗?我以前总是将这种信息包含在日志文件中,并且发现它在过去的许多事件中都很有用,当时在客户站点获取有关生产问题的信息.不可否认,此功能是为解决方案定制的,而不是基于任何当前的.NET日志框架.
我知道在NLog中内置了一些日志级别,如跟踪,信息,致命等
我想定义一些新的,例如"DBLog",并且只能将所有带有DBlog的日志配置为针对某个Target.
有办法做到这一点吗?或者我必须定义自定义日志?
当出现异常时,似乎有很多关于如何记录额外信息的信息和文档,但是我在尝试创建一个本质上是异常蜜罐的目标时遇到了麻烦.我只想查看写入exceptions.log文件的特定目标的所有异常的副本,而不是筛选各种日志文件以查看是否记录了任何异常.
我该怎么做呢?
当我注意到以下目标配置时,我正在查看NLog的一些最佳实践:
<targets async="true">
<default-wrapper xsi:type="BufferingWrapper" bufferSize="100"/>
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" />
<!-- other stuff -->
</targets>
Run Code Online (Sandbox Code Playgroud)
根据我的理解,它使用AsyncWrapper和BufferingWrapper包装文件目标...
两者有什么区别?我是否需要两者,因为NLog网站将两者都描述为"缓冲"....
我是NLog的新手,而且设置起来非常简单.
我遇到的问题是设置自定义LayoutRenderer
JsonLayoutRenderer.cs(名称空间:NBT.Logging;在同一解决方案中单独的Project)
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using Newtonsoft.Json.Linq;
using NLog;
using NLog.LayoutRenderers;
namespace NBT.Logging
{
[LayoutRenderer("json")]
public class JsonLayoutRenderer : LayoutRenderer
{
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
dynamic logEntry = new JObject();
logEntry.TimeStamp = logEvent.TimeStamp.ToString("yyyy-MM-ddTHH:mm:ss.mmmzzz", CultureInfo.InvariantCulture);
logEntry.TimeStampUTC = logEvent.TimeStamp.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.mmmZ", CultureInfo.InvariantCulture);
logEntry.Level = logEvent.Level.ToString();
logEntry.LoggerName = logEvent.LoggerName;
logEntry.Message = logEvent.FormattedMessage;
foreach(var prop in logEvent.Properties)
{
logEntry[prop.Key.ToString()] = prop.Value.ToString();
}
var json = logEntry.ToString(Formatting.None);
builder.Append(json);
}
}
} …Run Code Online (Sandbox Code Playgroud) 当我的应用程序发生异常时,我正在使用NLog发送电子邮件.这是我目标的一部分:
<target xsi:type="Mail"
name="email"
subject="${level}:" .. >
Run Code Online (Sandbox Code Playgroud)
我收到的电子邮件包含"错误:"或"致命:"等主题.这工作正常,但我想将Exception.Message添加到电子邮件的主题
是否可以在NLog中设置自定义属性.我无法找到如何做到这一点,所以只是为了清楚我想要的是我想要做的事情的一个例子:
m_oLogger.Fatal( oException.BuildMessage(), new {MyMessage=oException.Message});
Run Code Online (Sandbox Code Playgroud)
*请注意,BuildMessage()只是一个将完整的异常详细信息(包括内部异常)转换为可读字符串的扩展方法
在我的目标:
<target xsi:type="Mail"
name="email"
subject="${level}: ${Custom.MyMessage}" .. >
Run Code Online (Sandbox Code Playgroud)
然后我会收到以下主题的电子邮件:
致命:参数或参数中的语法错误.服务器响应是:帐户不存在
NLog可以实现这种灵活性吗?如果没有,您是否知道提供此类功能的其他.NET日志记录平台?
我有一个名为job的自定义布局渲染器.它提供了几个项目,在我们的app.config中使用如下:
<variable name="jobHost" value = "${job:item=host}" />
<variable name="jobService" value = "${job:item=service}" />
<variable name="jobNS" value = "${job:item=ns}" />
<variable name="jobName" value = "${job:item=name}" />
<variable name="jobKind" value = "${job:item=kind}" />
<variable name="jobScheduleId" value = "${job:item=scheduleId}" />
<variable name="jobLayout" value = "[H:${jobHost} S:${jobService} NS:${jobNS} N:'${jobName}' K:${jobKind} S:${jobScheduleId}]" />
<variable name="layout" value = "${longdate} [${threadid}] ${machinename} ${jobLayout} ${uppercase:inner=${level}} ${logger} - ${message} ${onexception:${newline}${exception:format=ToString:innerFormat=ToString:maxInnerExceptionLevel=2}}" />
<targets>
<target name="ThreadLog" xsi:type="ThreadSpecificTarget" />
<target xsi:type="SplitGroup" name="AllTargets">
<target name="TextFile" xsi:type="File" fileName="C:\Log\QuartzBackgroundEngine.txt" layout="${layout}"/>
<target name="Console" xsi:type="ColoredConsole" …Run Code Online (Sandbox Code Playgroud) 我可能在这里错过了一些基本的知识-但是否可以HttpContext.Current在自定义NLog事件中检索?
我试图给每个请求一个唯一的Guid,以便我可以将日志消息与单个事件相关联(即,将单个请求的每个日志事件关联在一起)。因此,我想将此Guid存储在中HttpContext.Current.Items,然后在NLog目标中检索它,并将其包括在日志消息中。
这是我要访问的示例目标HttpContext.Current:
[Target("AzureTableTarget")]
public class AzureTableTarget : TargetWithLayout
{
public AzureTableTarget()
{
_appSettings = IoCResolver.Get<IAppSettings>();
}
protected override void Write(LogEventInfo logEvent)
{
var correlationId = HttpContext.Current; //This is always null
var batchOperation = new TableBatchOperation();
CxLogEventBuilder.Build(_appSettings, logEvent).ForEach(batchOperation.Insert);
_loggingTable.ExecuteBatchAsync(batchOperation);
}
}
Run Code Online (Sandbox Code Playgroud) 是否可以在NLog布局中包含回车符和换行符.我希望在所有日志中保存以下格式的标头信息:
Application Name: <Application Name>
File Version: <Version number>
Released: <Release date>
User: <Windows User>
etc...
21|17:07:54|domain\user|Trace| System.OverflowException: Arithmetic operation
resulted in an overflow at application.form.Button1_Click(Object sender,
EventArgs e) in D:\Documents and
Settings\user\Mydocuments\workarea\application\application
project\application.vb:line 47
Run Code Online (Sandbox Code Playgroud)
所有的帮助非常感谢
问候
保罗J.
NLog具有logger.Fatal("Message",T object)等方法.
我脑子里有两个问题 -
除了类型安全记录器之外,这些方法的目的是什么?
我们可以使用此方法在运行时根据对象属性构造动态消息字符串吗?
我们希望在运行时基于对象属性构造消息,以便Nlog可以反映该类型.这可能吗 ?
我对nlog很陌生。我有一个使用nlog的.NET Framework控制台应用程序。我希望将nlog配置为直接将日志写入控制台。我安装了nlog和nlog.config nuget软件包,其中nlog.config中包含以下内容
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<targets>
<target xsi:type="Console"
name="String"
layout="Layout"
footer="Layout"
header="Layout"
encoding="Encoding"
/>
</targets>
</nlog>
Run Code Online (Sandbox Code Playgroud)
然后在C#中,以下两行将不会打印到控制台。
var logger = LogManager.GetCurrentClassLogger();
logger.Info("hello");
Run Code Online (Sandbox Code Playgroud)
在网上看过,但至今没有找到任何东西。