我在TopShelf服务中使用Serilog,登录到控制台和滚动文件。在控制台中运行服务时,我的消息将写入日志文件,但是当我安装服务并运行它时,不会发生日志记录。我需要配置什么特别的东西吗?该文件将写入"。\ logs \ log- {date} .txt"下的二进制文件夹。
祝你好运 Gope
答案 0 :(得分:21)
我有一个非常类似的问题。就我而言,问题在于相对路径。 我只需要指定绝对路径。现在它就像一个魅力。
WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\log-{Date}.log")
希望它有所帮助!
答案 1 :(得分:10)
我们遇到了同样的问题,这就是我们发现的:
<强>症状强> - 没有创建日志文件 - 没有日志写入Seq。
根据@ gdoten的评论,我们的日志文件被写入\ windows \ syswow64(服务作为localservice运行)。
我们认为这些文件的权限可能不允许读取持久的假脱机文件,导致没有日志写入Seq。
修复是硬编码rollinglogfile和缓冲区的路径。
答案 2 :(得分:7)
props: {
item: null
},
尝试这个,它在我的ASP.NET核心2应用程序中作为Windows服务运行
答案 3 :(得分:3)
运行服务的帐户很可能缺少写入日志文件位置的权限。尝试将日志文件位置更改为系统的临时文件夹,以查看是否是这种情况。
如果仍然失败,使用Serilog的SelfLog
获取异常信息是最好的选择。
答案 4 :(得分:0)
我正在作为Windows服务运行,这是我的json文件。
{
"Serilog": {
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "RollingFile",
"Args": {
"pathFormat": "C:\\Program Files\\mycomp\\myapp\\logs\\log-{Date}.txt"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId", "WithEnvironmentUserName", "WithProcessId" ],
"Properties": {
"Application": "MyApp",
"Environment": "Development"
}
} }
-吉娜
答案 5 :(得分:0)
我遇到了类似的问题,它最终由于以下代码
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(AppDomain.CurrentDomain.BaseDirectory + "\\appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
该代码指定appsettings.json文件,并且在该文件中具有serilog的配置设置,但是在运行中运行时,当前文件夹未指向可执行文件文件夹。因此它找不到文件appsettings.json,然后serilog当然不会按预期工作。
只需更改代码即可,如下所示
public static List<InvoiceModel> CustomerInvoices(Dictionary<string, string> pVal)
{
List<InvoiceModel> UserInvoices = new List<InvoiceModel>();
string sQuery = "SELECT * from pctn_invoices WHERE INV_CustID = " + pVal;
MySqlConnection m_connection = new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
if (m_connection.State == ConnectionState.Open) m_connection.Close();
MySqlCommand myCommand = new MySqlCommand(sQuery);
myCommand.Connection = m_connection;
m_connection.Open();
MySqlDataReader sRet = myCommand.ExecuteReader();
while (sRet.Read())
{
InvoiceModel UserInvoice = new InvoiceModel();
UserInvoice.m_ID = sRet["ID"].ToString();
UserInvoice.m_CustomerID = sRet["INV_CustID"].ToString();
UserInvoice.m_Description = sRet["INV_Description"].ToString();
UserInvoice.m_Total = sRet["INV_Total"].ToString();
UserInvoices.Add(UserInvoice);
}
m_connection.Close();
return UserInvoices;
}
答案 6 :(得分:0)
您还可以使用类似的方法(当您要创建Windows服务和Serilog时):
var builder = new ConfigurationBuilder()
.AddJsonFile($@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();