我有这个函数写入我的日志文件。它默默地失败了。因为在此函数中没有引发错误,它只是无法创建或写入文件。我正在写信给%TEMP%\myappname.log
。它在%USERPROFILE%\Desktop\myappname.log
中也失败了。服务器是Windows Server 2008 R2 Standard。
我在使用其他程序写入应用程序文件夹时遇到了这种情况,因此转移到写入%TEMP%
目录并解决了这个问题。但是这个系统甚至不允许我写入%TEMP%
目录。
是的我尝试以管理员身份运行,但没有帮助。
在这种情况下,%TEMP%通过ExpandEnvironmentStrings
解析为C:\Users\sa\AppData\Local\Temp\2
所以g_strLogPath是C:\Users\sa\AppData\Local\Temp\2\myappname.log
。
Public Function LogMessage(ByVal strInput As String, Optional ByVal blnDate As Boolean = False) As Boolean
Dim intFileNumber As Integer
On Error GoTo ErrorHandler
If g_lngLogLevel <> 1 Then
Exit Function
End If
If Len(g_strLogPath) = 0 Then
SetLogPath
End If
If blnDate Then
strInput = Format(Now, cstrLogDateFormat) & " : " & strInput
End If
intFileNumber = FreeFile
Open g_strLogPath For Append As #intFileNumber
Print #intFileNumber, strInput
Close #intFileNumber
LogMessage = True
Exit Function
ErrorHandler:
MsgBox _
"Error: " & Err.Number & vbCrLf & _
"Location: Module1.LogMessage" & vbCrLf & _
"Line: " & Erl & vbCrLf & _
Err.Description, vbExclamation + vbOKOnly
End Function
答案 0 :(得分:5)
试试这个
Sub GetTmpPath()
'This will give the Temp Path
MsgBox IIf(Environ$("tmp") <> "", Environ$("tmp"), Environ$("temp"))
End Sub
因此您可以尝试将其用作
Ret = IIf(Environ$("tmp") <> "", Environ$("tmp"), Environ$("temp"))
g_strLogPath = Ret & "\Sample.Log"
Open g_strLogPath For Append As #intFileNumber
答案 1 :(得分:0)
尝试使用GetTempPath代替Environ$("TEMP")
来获取临时文件夹。
如果当前用户在TEMP文件夹中没有写入权限,则许多系统组件也将失败。
答案 2 :(得分:0)
问题是loglevel检查。 它实际上从未涉及公开或印刷声明。
我定义了三个日志级别 0 =没有日志 1 =一切 2 =仅错误
它被设置为2 LogError调用了LogMessage,它检查了loglevel&lt;&gt; 1因此从未跑过。