Asp.NET MVC,自定义的TextWriterTraceListener不会创建文件。
Asp.NET MVC,自定义的TextWriterTraceListener不会创建文件。
在MVC应用程序中,当使用initializeData="CustomWeblog.txt"参数时,自定义监听器不会创建日志文件,但是使用initializeData="d:\CustomWeblog.txt"会触发文件创建。为什么会出现这种行为?控制台应用程序会为所有类型的监听器生成文件。
自定义类:
public class CustomTextWriterTraceListener : TextWriterTraceListener { public CustomTextWriterTraceListener(string fileName) : base(fileName) }
Web.config(MVC应用程序,web.config):
自定义监听器不会创建日志文件。
调用者:
TraceSource obj = new TraceSource("Trace", SourceLevels.All); obj.TraceEvent(TraceEventType.Critical,0,"This is a critical message");
我尝试添加了一些额外的配置:这个博客和这个。但是没有成功。我应该提供绝对路径吗?是否可以通过创建单独的程序集来解决这个问题?
问题的原因是自定义的TextWriterTraceListener没有生成文件路径,这是因为自定义的监听器吞没了UnauthorisedAccessException异常,所以应用程序继续工作而不通知我们权限问题。
解决方法是在initializeData属性中声明完整的路径,并确保具有适当的权限。
具体来说,通过查看TextWriterTraceListener源代码,可以找到生成路径的方法。根据项目属性中的Web服务器设置不同,实际存储路径会有所不同。在调试MVC应用程序时,以管理员身份运行VS时,日志文件将正确生成在指定文件夹中。但是,如果没有管理员权限运行VS,则自定义监听器将不会创建文件。
当遇到访问路径被拒绝的问题时,可以参考相关的Stack Overflow链接来解决。此外,还可以通过在initializeData属性中声明完整的路径来解决问题,但需要确保具有适当的权限。
总结起来,解决Asp.NET MVC中自定义TextWriterTraceListener不生成文件的问题的方法是:
1. 查看自定义监听器的源代码,了解路径的生成方式。
2. 确保以管理员身份运行VS,以便自定义监听器可以正确创建文件。
3. 如果没有管理员权限运行VS,可以尝试使用完整的路径声明。
4. 确保有适当的权限来访问路径,可以参考相关的Stack Overflow链接来解决权限问题。
以上是解决该问题的方法,希望对读者有所帮助。
在尝试创建自定义的滚动文本编写器跟踪侦听器时,我遇到了与您描述的相同的问题。长话短说,在进行了一番周折之后,我得出了以下结论。
问题的解决办法是创建一个名为"RollingTextWriterTraceListener"的自定义类,继承自"TextWriterTraceListener"类。该类的构造函数接受一个文件名作为参数,并在其中实现了一些方法。
在"ensureWriter"方法中,首先解析给定的文件名,将相对路径(如果存在)解析为完整路径。然后检查是否已经存在了一个编写器实例,如果不存在则创建一个新的编写器,并将其赋值给父类的"Writer"属性。接下来,检查文件是否存在,如果不存在则关闭并释放已有的编写器,并创建一个新的编写器。最后,如果设置了"AddToArchive"标志,则调用自定义的"TextFileArchiveHelper.Archive"方法对前一个日志文件进行打包。
"createWriter"方法用于创建编写器实例。它尝试打开文件并创建一个新的"StreamWriter"对象,并将其赋值给父类的"Writer"属性。如果文件已被锁定或没有足够的权限访问,则会返回false。
在类中还实现了一些重写的方法,如"Flush"、"Write"和"WriteLine",以确保在调用这些方法之前已经创建了一个编写器实例。
除了上述代码,还提供了一个名为"ServerPathUtility"的实用类,用于解析路径。它包含了一些静态方法,如"ResolveOrCreatePath"、"ResolvePhysicalPath"和"ResolveFormat",用于解析和处理路径。此外,还提供了一个"ExpandApplicationVariables"方法,用于解析应用程序变量。该类还包含一个名为"VariableResolutionStrategies"的字典,用于存储不同变量的解析策略。
这个实用类允许解析相对路径,并可以自定义路径的格式。例如,可以通过在应用程序启动时进行配置来添加"ApplicationName"变量。在配置方法中,可以将"ApplicationName"变量与相应的值关联起来,并将其添加到"VariableResolutionStrategies"字典中。
总结起来,问题的原因是在自定义的"TextWriterTraceListener"类中没有正确创建文件。解决方法是创建一个新的类,并在其中实现必要的方法和逻辑,以确保在写入日志之前已经创建了文件。
这篇文章展示了如何解决这个问题,并提供了相关的代码示例。通过使用这些代码和说明,读者可以更好地理解问题的原因和解决方法,并在需要时应用到自己的项目中。