Logging 如何在自定义ColdFusion日志文件中获得新行?
我已经构建了一个ColdFusion自定义标记来记录错误消息和其他字符串,只要我在开发过程中需要它 我的自定义标记是用cfscript编写的。我试着记录我能得到的一切。因此,每当我在“logMessage”中添加一个新字符串时,我都希望记录一个新行 我试图包含一个变量Logging 如何在自定义ColdFusion日志文件中获得新行?,logging,coldfusion,custom-tags,Logging,Coldfusion,Custom Tags,我已经构建了一个ColdFusion自定义标记来记录错误消息和其他字符串,只要我在开发过程中需要它 我的自定义标记是用cfscript编写的。我试着记录我能得到的一切。因此,每当我在“logMessage”中添加一个新字符串时,我都希望记录一个新行 我试图包含一个变量 crlf = chr(10) & chr(13); 但这不起作用。我认为writeLog(和相应的cflog)不应该添加新行吗 这就是我尝试使用变通方法(每当管道出现时使用writeLog())的原因,但这会产生大量开销
crlf = chr(10) & chr(13);
但这不起作用。我认为writeLog(和相应的cflog)不应该添加新行吗
这就是我尝试使用变通方法(每当管道出现时使用writeLog())的原因,但这会产生大量开销,因为每次运行writeLog()时都会有大量元数据
这是我的剧本。第一行评估给定的属性(如“logType”和cfcatch对象),并将值(如果已定义)附加到“logMessage”中
请向下查看包含for循环的最后几行
<cfscript>
logMessageDelimiter="*******************************************************";
logMessage = "";
fileName = application.standard_log_path & application.server_name & "_standardLog";
logType = "information";
crlf = chr(10) & chr(13);
if(isDefined("attributes")){ //any attribute is given
if(isDefined("attributes.text")){ //a custom text is given
logMessage &= "LogMessage: " & attributes.text & " |" ;
}
if(isDefined("attributes.file")){ //output filename
fileName = application.standard_log_path & application.server_name & "_" & attributes.file;
}
if(isDefined("attributes.logType")){ //a loglevel type
switch(attributes.logType){
case "i":
logType = "information";
break;
case "w":
logType = "warning";
break;
case "e":
logType = "error";
break;
case "f":
logType = "fatal";
break;
default:
logType = "information";
}
}
if(isDefined("attributes.catch")){ //catch object is defined
logMessage &= "CFCATCH defined: " & " | ";
if(isDefined("attributes.catch.detail"))
logMessage &= "detail: " & attributes.catch.detail & " | ";
if(isDefined("attributes.catch.ErrorCode"))
logMessage &= "ErrorCode: " & attributes.catch.ErrorCode & " | ";
if(isDefined("attributes.catch.ErrNumber"))
logMessage &= "ErrNumber: " & attributes.catch.ErrNumber & " | ";
if(isDefined("attributes.catch.ExtendedInfo"))
logMessage &= "QueryError: " & attributes.catch.ExtendedInfo & " | ";
if(isDefined("attributes.catch.message"))
logMessage &= "message: " & attributes.catch.message & " | ";
if(isDefined("attributes.catch.RootCause"))
logMessage &= "RootCause: " & attributes.catch.RootCause & " | ";
if(isDefined("attributes.catch.TagContext"))
{
for(i=1; i LTE ArrayLen(attributes.catch.TagContext); i=i+1)
{
logMessage &= "TagContext["& i &"] Column: " & attributes.catch.TagContext[i]["Column"] & " | ";
logMessage &= "TagContext["& i &"] ID: " & attributes.catch.TagContext[i]["ID"] & " | ";
logMessage &= "TagContext["& i &"] Line: " & attributes.catch.TagContext[i]["Line"] & " | ";
logMessage &= "TagContext["& i &"] RawTrace: " & attributes.catch.TagContext[i]["Raw_Trace"] & " | ";
logMessage &= "TagContext["& i &"] Template: " & attributes.catch.TagContext[i]["Template"] & " | ";
logMessage &= "TagContext["& i &"] Type: " & attributes.catch.TagContext[i]["Type"] & " | ";
}
}
if(isDefined("attributes.catch.Type"))
logMessage &= "Type: " & attributes.catch.Type & " | ";
if(isDefined("attributes.catch.NativeErrorCode"))
logMessage &= "NativeErrorCode: " & attributes.catch.NativeErrorCode & " | ";
if(isDefined("attributes.catch.SQLState"))
logMessage &= "SQLState: " & attributes.catch.SQLState & " | ";
if(isDefined("attributes.catch.SQL"))
logMessage &= "SQL: " & attributes.catch.SQL & " | ";
if(isDefined("attributes.catch.QueryError"))
logMessage &= "QueryError: " & attributes.catch.QueryError & " | ";
if(isDefined("attributes.catch.Where"))
logMessage &= "Where: " & attributes.catch.Where & " | ";
if(isDefined("attributes.catch.ErrNumber"))
logMessage &= "ErrNumber: " & attributes.catch.ErrNumber & " | ";
if(isDefined("attributes.catch.MissingFileName"))
logMessage &= "MissingFileName: " & attributes.catch.MissingFileName & " | ";
if(isDefined("attributes.catch.MissingFileName"))
logMessage &= "MissingFileName: " & attributes.catch.MissingFileName & " | ";
if(isDefined("attributes.catch.LockName"))
logMessage &= "LockName: " & attributes.catch.LockName & " | ";
if(isDefined("attributes.catch.LockOperation"))
logMessage &= "LockOperation: " & attributes.catch.LockOperation & " | ";
if(isDefined("attributes.catch.ExtendedInfo"))
logMessage &= "ExtendedInfo: " & attributes.catch.ExtendedInfo & " | ";
}
}
splittedText = listToArray(logMessage,'|');
for(i=1; i LTE ArrayLen(splittedText); i=i+1)
{
//I really need a better solution than this loop...
writeLog(splittedText[i],logType,true,fileName);
}
writeLog(logMessageDelimiter,logType,true,fileName);
那你会怎么做?有没有一种方法可以在不反复执行writeLog()的情况下获取新行
我希望看到这样的结果:
<cftry>
...some buggy code
<cfcatch>
<customTagName text="Hey, you've got an error!" file="myLogFile" type="e" catch="#cfcatch#">
</cfcatch>
</cftry>
"Information","ajp-bio-8013-exec-37118","02/11/13","14:26:09","SYS_MYSYS","LogMessage: Hey, you've got an error!"
"CFCATCH defined: "
" detail: "
" ErrorCode: "
" ErrNumber: 0 "
" QueryError: "
" message: Errormessage from CF telling me my errors "
" TagContext[1] Column: 0 "
" TagContext[1] ID: CF_CFPAGE "
" TagContext[1] Line: 183 "
" TagContext[1] RawTrace: at cffileecfm1278323672._factor2(/the/path/to/my/file.cfm:183) "
" TagContext[1] Template: /the/path/to/my/file.cfm"
" TagContext[1] Type: CFML "
...
"*******************************************************"
我可以使用方法写入文件,但我认为这也不是最好的方法,不是吗?另外:我不能从我的应用程序中写入coldfusion的标准日志文件夹(例如/path/to/coldfusion/instancename/logs/myLogFolder)
有没有办法让我的日志文件具有某种结构?你有什么想法吗?没有。我刚刚验证了CF用空格替换CRLF字符。就这样。我猜它是这样做的,这样日志解析器就可以告诉我CRLF表示日志项的结束,而不必担心它是日志消息的一部分。在我看来,CF有点懒惰。有趣的是,Railo并没有这样做
你能做的最好的事情就是粘贴一些其他的ASCII字符(我刚刚测试了chr(30)-记录分隔符),然后编写一个日志查看器,用CRLF替换掉它。这不是一个很好的建议,但如果它对您很重要,它是一个选项。FYI,CRLF是
Chr(13)和Chr(10)代码>不是相反,为什么您认为cflog和writelog不会添加新行?我很确定cflog和writelog会转义或忽略新行。这通常是您想要的,因为每个条目都有一行。由于您已经通过单个标记进行了日志记录,您可能希望使用文件API以您想要的格式直接写入文件。如果您确实希望对输出进行这种级别的控制,可以使用cffile action=“write”创建您自己的日志CFC或者fileWriteLine?我认为可以使用文件API,但我只是想找到一种使用cflog writeLog()的方法。不过还是要谢谢你。我为此提出了一个问题:谢谢你确认我的假设,谢谢你提出了一个问题。我会留意的。
"Information","ajp-bio-8013-exec-37118","02/11/13","14:26:09","SYS_MYSYS","LogMessage: Hey, you've got an error!"
"CFCATCH defined: "
" detail: "
" ErrorCode: "
" ErrNumber: 0 "
" QueryError: "
" message: Errormessage from CF telling me my errors "
" TagContext[1] Column: 0 "
" TagContext[1] ID: CF_CFPAGE "
" TagContext[1] Line: 183 "
" TagContext[1] RawTrace: at cffileecfm1278323672._factor2(/the/path/to/my/file.cfm:183) "
" TagContext[1] Template: /the/path/to/my/file.cfm"
" TagContext[1] Type: CFML "
...
"*******************************************************"