Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用EnterpriseLibrary.Logging登录UTF-8_C#_Logging_Encoding_Enterprise Library 5 - Fatal编程技术网

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

C# 如何使用EnterpriseLibrary.Logging登录UTF-8,c#,logging,encoding,enterprise-library-5,C#,Logging,Encoding,Enterprise Library 5,我一直在搜索EnterpriseLibrary.Logging。 我有一个如下设置的侦听器和格式化程序: <add name="NormalLogListener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging" listenerDa

我一直在搜索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" />


我在多个项目中使用它,它工作得很好

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

我希望能够登录到我的文件中的字符串中有特殊字符(例如umlauts);当我将我的文件转换为UTF-8并让它被进一步使用时,我发现日志记录可以很好地工作,但我真的希望以这种方式创建它

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


提前谢谢你的帮助

开箱即用,我不相信EnterpriseLibrary.Logging应用程序块支持输出到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);
            }
        }
    }
}

是的,我也担心,但我还没有放弃希望;)也许你有一个很好的例子?EnterpriseLibrary版本?我会测试它,但是现在用代码配置日志文件的路径似乎不太好,这难道不能从我的xml TraceListener声明中获取路径吗?同意。就像我说的,它又快又脏。我没有在TraceListener声明中看到如何配置路径的示例,但我知道您可以
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);
            }
        }
    }
}