gpt4 book ai didi

c# - 如何使用 EnterpriseLibrary.Logging 登录 UTF-8

转载 作者:可可西里 更新时间:2023-11-01 08:48:19 25 4
gpt4 key购买 nike

我对有关 EnterpriseLibrary.Logging 的搜索有些困惑。我有一个这样设置的监听器和格式化程序:

<add name="NormalLogListener"
type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging"
fileName="logs/MVC22.log"
footer=""
formatter="ShortLogFormatter"
header=""
rollInterval="Day"
timeStampPattern="yyyy-MM-dd"
maxArchivedFiles="14" />

...

<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging" 
template="{timestamp(local)} - {severity} - {category} - {message}"
name="ShortLogFormatter" />

我在多个项目中使用它并且工作正常。

除了一件事,我希望 EnterpriseLibrary 使用 UTF-8 编码创建我的日志文件(默认情况下我得到 ANSI 文件),但不幸的是我不知道该怎么做。

我希望能够登录到我的文件的字符串中有特殊字符(例如变音符号);当我将文件转换为 UTF-8 并进一步使用它时,我看到日志记录工作正常,但我真的希望以这种方式创建它。

这可以在 xml 配置或其他地方完成吗?

提前感谢您的帮助!

最佳答案

开箱即用,我不相信 EnterpriseLibrary.Logging 应用程序 block 支持输出到 utf-8。它似乎只输出到默认的 ANSI。也就是说,您始终可以编写自己的 TraceListener 以 utf-8 格式输出。

未经测试的代码。我写得又快又脏。查看硬编码文件路径:

using System;
using System.Text;
using System.Diagnostics;
using Microsoft.Practices.EnterpriseLibrary.Logging;
using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;

namespace YourNamespace
{
[ConfigurationElementType(typeof(CustomTraceListenerData))]
class UTF8Logging:CustomTraceListener
{
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
{
if (data is LogEntry && this.Formatter != null)
{
this.WriteLine(this.Formatter.Format(data as LogEntry));
}
else
{
this.WriteLine(data.ToString());
}
}

public override void Write(string message)
{
this.WriteLine(message);
}

public override void WriteLine(string message)
{
string fileName = @"C:\Your.log";
using (StreamWriter sw = new StreamWriter(File.Exists(fileName) ? System.IO.File.Open(fileName, FileMode.Append) : System.IO.File.Create(fileName), Encoding.UTF8))
{
Byte[] logMessage = new UTF8Encoding(true).GetBytes(message);
sw.Write(logMessage,0,logMessage.Length);
}
}
}
}

关于c# - 如何使用 EnterpriseLibrary.Logging 登录 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15497200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com