"has long been" or "has been for a long time"
As far as I know, '(for) a long time' is preffered to 'long' in affirmative sentences unless 'long' is matched up with too, enough, as, so, before, after, and etc.
I read the following sentence on the website, however, and got a little confused:
Smoking has long been linked to lung cancer.
http://www.onestopenglish.com/community/your-english/word-grammar/your-english-word-grammar-long/550209.article
This sounds perfectly natural to me, but I just wonder is it better to say "Smoking has been linked to lung cancer (for) a long time" because it is an affirmative sentece?
Please help. Thank you in advance.
I think you're overanalyzing, but that's partly because the linked article is a little confusing at the end. In your sample sentence (as the linked article explained), it's being used as an adverb. The type of sentence really doesn't matter.
The article mentions negatives at the end. It says:
As a noun, long is also normally used in negatives and questions and means ‘a long period of time’.
That only applies to its usage as a noun, and even then it's usually used in negatives - this isn't a rule so much as an observation on the part of the author.
The rephrasing of your sample sentence, "Smoking has been linked to lung cancer for a long time," is more casual, and a bit less emphatic to my ear. I would not say it's better. For a professional or educated audience, I'd stick with the original. Otherwise, it's up to you!